1

次のようなスレッドがあります。

DWORD WINAPI message_loop_thread(LPVOID dummy) {
        MSG message;
        while (GetMessage(&message, NULL, 0, 0)) {
                TranslateMessage(&message);
                DispatchMessage(&message);
        }
}

そして、私はそれを始めますCreateThread:

DWORD thread_id;
CreateThread(0, 0, message_loop_thread, 0, 0, &thread_id);

これは機能しているようですが、どうすればこのスレッドを正しく閉じることができますか? 通常、スレッドは待機してGetMessageいるため、スレッドはブロックされていると思います。

これを行う良い方法はありますか?試してみTerminateThreadましたが、これはハングします。スレッドを停止するのは良い解決策ではないと思います。

誰かがアイデアを持っていますか?

よろしくベンジ・マイヤー

4

1 に答える 1

3

WM_QUITに投稿するのが正しい方法ですthread_id。これに使用PostThreadMessage()します。応答では、 GetMessage0 が返され、whileループが終了し、関数が終了します (誤って、returnステートメントがありません)。スレッドのトップレベル関数が終了すると、スレッドは終了します。

于 2011-08-02T12:36:04.910 に答える