2016-11-18 88 views
0

如何將信號從一個工作線程發送到另一個工作線程?第一個線程將在第一個線程執行完他的作業之後等待第二個線程的信號。我該如何實現這個功能?在MFC中的兩個子線程之間發送信號

+2

'PostThreadMessage()'是一種方法。 –

+2

'WaitForSingleObject','SetEvent' –

+0

@JoeWillcoxson:[爲什麼PostThreadMessage發佈的消息消失?](https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553)此外,機會你會想要在相反的方向同步,所以你正在尋找相當於'SendThreadMessage'([它不存在](https://blogs.msdn.microsoft.com/oldnewthing/20081223- 00/p = 19743))。 – IInspectable

回答

0

通過「發送信號」我想你並不是指發送(Windows)消息。對於非常簡單的事情來說,這太複雜了。您的(第二個)工作線程應該創建一個消息循環並檢查(自定義)消息?太過分了。雖然工作線程當然可以創建消息循環,但這很少見。

更好地使用同步,正確的對象類型是「事件」(一個簡單的對象,可以處於有信號狀態或無信號狀態)。第二個線程應該等待,第一個線程必須將其設置爲已發信號狀態以通知第二個線程完成其工作(這相當於「發送信號」)。

+0

*「雖然工作線程當然可以創建消息循環,但這種情況非常罕見。」* - 不,不是。這**非常普遍。每個承載COM對象的工作線程(僅與STA兼容)將運行一個消息循環。事實上,已經初始化到STA中的任何(工作者)線程將不得不具有消息循環。通過消息傳遞進行同步非常常見。 – IInspectable