0

コントローラオブジェクトでon_left_mouse_releasedなどのメソッドを呼び出すリスナークラスを作成するために作成しました。正常に動作し、boost::threadを使用して別のスレッドで実行しようとしています。しかし、私は何か間違ったことをしているようです。私はマルチスレッドに慣れていないので、これは簡単に単純なエラーになる可能性があります。

リスナークラスから選択された部分は次のとおりです。

void Listener::listen()
{
keepListening = true;

while(keepListening)
{
    if(timerEnabled)
    {
        this->CheckForTimerEvent();

        if( !PendingMouseOrKeyEvents()) //readconsoleinput is blocking
            continue;
    }

    if(!keepListening) //could have been changed in a timer event
        break;

    if(!mouseEnabled && !keyboardEnabled)
        continue;

    ReadConsoleInput(hIn, &InRec, 1, &NumRead);


    //see http://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx
    //for more information on InRec and its submembers

    if(mouseEnabled &&InRec.EventType == MOUSE_EVENT)
    {
        this->ProcessMouseEvent(InRec.Event.MouseEvent);
        cout << "here";
    }
    else if(keyboardEnabled && InRec.EventType == KEY_EVENT)
    {
        this->ProcessKeyEvent(InRec.Event.KeyEvent);
                    cout << "here";
    }
}
}
void Listener::operator()()
{
    listen();
}

私のメイン関数で、listenerという名前のListenerオブジェクトを作成する場合は、「listener();」と言います。両方のcoutは、適切なイベントで発生します。ただし、「boost :: thread listen(boost :: ref(listener));」を使用すると、代わりに、何も起こりません。

なぜこれなのか誰か分かりますか?

4

1 に答える 1

0

ほとんどの場合、スレッドを開始し、テスト プログラムを終了する前にスレッドが終了するのを待つのを忘れました。を追加

listen.join();

テストプログラムの最後に。

于 2012-08-11T11:06:18.857 に答える