1

メッセージを同時に処理し、while ループを実行する必要がある WIN32 (C++) プログラムを作成しようとしています。そのためには、スレッドを使用したいと考えています。

メッセージ ループを別のプロシージャ (関数 WinMain から呼び出される) に移動すると、すべてが正常に機能していました。ただし、メイン プロセスから単純に呼び出すのではなく、以下のコードを使用してそのプロシージャをスレッド化すると、ウィンドウが応答しなくなります。

なぜそれが起こるのか知っていますか?

WinMain 内で、メイン ウィンドウを作成した後、メッセージ ループと戻り値を削除し、次のコードを追加しました。

std::thread t1(message_loop);
t1.join();
return return_val;

return_valメッセージ ループが終了したときに WinMain が返す値を受け取るために使用するグローバル変数です。

また、関数 message_loop は次のとおりです。

void message_loop()
{
    MSG messages;
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
    return_val = messages.wParam;
}
4

1 に答える 1