說每個線程的任務功能看起來是這樣的:
void threadfunc()
{
MSG winmsg;
BOOL rval;
while (GetMessage(&winmsg, (HWND__ *) -1, 0, 0) != -1)
{
DoThreadProcessing();
}
// GetMessage failed. Find out why and try to recover or die gracefully
}
上GetMessage此塊直到線程是由這個未來函數發送一個消息的到來喚醒
bool PostMsg(DWORD & ThreadId)
{
if (PostThreadMessage(ThreadId,
WM_USER,
(WPARAM) NULL,
0); != 0)
{
return true;
}
else
{
// failed. Find out why and try to recover or die gracefully
return false;
}
}
通過神奇的PostThreadMessage。
如果你關心發送什麼類型的消息,你可以發送簡單的信息,如Msg
參數中的一個數字,並從winmsg.message
中取出。由於Windows使用message
的上半部分來實現其自身的惡意目的,因此請將該數字保持較小。
如果您需要更復雜的消息,請致電Mutex not correctly used? Continuation of past questions。
所以在OP的情況下,線程1調用PostMsg和線程2的句柄來喚醒線程2.線程2調用PostMsg和線程3的句柄等等。
你甚至可以使用std::thread的native_handle方法主要保留在標準庫中,但我從來沒有測試過。讓我知道它是否有效。
向我們展示你到目前爲止所嘗試過的。 – ravenspoint
如果您在Windows上,請考慮使用[Windows事件](https://msdn.microsoft。com/en-us/library/windows/desktop/ms682655(v = vs.85).aspx) – Serdalis
使用Windows事件會非常慢!只需使用一個簡單的布爾值,用互斥體保護,這就是所需要的。 – ravenspoint