2011-08-18 21 views
0

我在C++(Windows,Visual Studio 2010)中有兩個類,每個都運行不同的線程,我想以簡單的方式在它們之間發送消息。這個想法是,main調用了class2上的讀取,等待class2獲取數據,然後main類接收它並繼續 - 就像一個套接字,但是在同一個程序上的兩個class /線程之間。這可以做到嗎?Windows C++如何調用從一個線程到另一個線程的阻塞讀取?

例子:

class MyClass(){ 
    ... 
    void run(){...}; //runs a thread here that collects data from a network socket 
}; 



int main(){ 
    MyClass *mc = new MyClass(); 
    mc->run(); 
    ... 
    mc->receiveData(); //returns a value AFTER the class gets a hold of it, and blocks in the meantime... 
} 

有沒有什麼簡單的方法來做到這一點?有點像創建一個套接字,並從中讀取,直到它從網絡接收到數據包/數據纔會返回,除非我想要一個類在本地系統上執行此操作。謝謝!

+0

http://en.wikipedia.org/wiki/Producer-consumer_problem – Michael

+0

'就像一個套接字,但在同一個程序上的兩個類/線程之間。可以這樣做嗎?' - 你可以用套接字來做......在同一個程序中的套接字沒有錯。 – mah

+1

協程模型聽起來很合身。那麼你只需要1個線程。 http://en.wikipedia.org/wiki/Coroutine – Matt

回答

0

聽起來像你想要一個線程安全的隊列來把你的消息。

查看Microsoft Parallel Patterns Library中的'Parallel containers and objects'。該頁面有一個示例,顯示使用concurrent_vector

1

創建線程並在線程上調用join()。 (谷歌那個)。線程連接將允許你產生一個線程進行處理,並指出一旦主要到達連接,它應該等待它加入的線程完成。當它返回到join語句時,你可以從線程返回一個值,這樣main可以在你需要的時候知道結果。

相關問題