これがWindowsのWin32アプリケーションの場合、アプリケーションのメッセージ処理キューを使用するのが一般的なアプローチです。コンソールアプリケーションの場合
(in header file)
#define WM_MYCUSTOMMESSAGE (WM_USER + 1)
(WndProc for you main window)
LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_MYCUSTOMMESSAGE:
... Process something
break;
}
}
(On seconday thread)
SendMessage(hWnd, WM_MYCUSOMMESSAGE, wParam, lParam); // Send and wait for the result
PostMessage(hWnd, WM_MYCUSTOMMESSAGE, wParam, lParam); // Send the message and continue this thread.
[EDIT] 、Windowsのイベントを使用してみてください:あなたは、カスタム・ユーザー・メッセージを待つのアプリのメインウィンドウで は、一般的にそれが何かのようになります。したがって、名前付きイベントを作成するには、次のようにしてください。
(On primary thread)
HANDLE myEvent = CreateEvent(NULL, FALSE, FALSE, "MyEvent");
... later as part of a message processing loop
while(true)
{
WaitForSingleObject(myEvent, 0); // Block until event is triggers in secondary thread
... process messages here
... I recommend storing "messages" in a synchronized queue
}
(On secondary thread)
SetEvent(myEvent); // Triggers the event on the main thread.
どのスレッドが機能を実行するのが重要かを明確にすることはできますか?最良の方法は、あなたが解決しようとしている問題が何であるかに大きく依存します。 –
よく、この機能のいくつかは非常に長く実行され、ネットワーク部分が次のパケットをしばらく処理することができません。
3番目のスレッドでこの機能を起動すると、多くのスレッドが実行され、リスト、配列などで奇妙なことが起きるため、デバッグが難しくなります。\ n \ rこのコメントを送信します)
メインスレッドでこの関数を実行するようにprefferします – Kosmos
あなたのコードでバグを検出するのが簡単になるほど、デバッグが容易になります。コードの並行性を高めると、バグがクラッシュする可能性が高くなり、バグの発見と修正にかかる時間が短縮されます。 –