メッセージを同時に処理し、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;
}