2017-02-15 20 views
0

說我使用async在單獨的線程中調用某個函數,並且函數等待輸入數據(數據以2-3秒的間隔出現)。我可以將數據傳遞給在單獨的線程中運行的函數嗎?例如:C++ 11如何將數據傳遞給正在運行的線程

void f(int x) { std::cout << "x: " << x << std::endl;} 

int main() { 
    int x = get_x(); 
    std::async(std::launch::asunc, f, x); 
    while(true) { 
     x = get_x(); 
     //update x and sleep 2 sec 
    } 
} 
+1

當你真的嘗試這個時會發生什麼? – YePhIcK

+0

@YePhIcK我想這個函數總是打印第一個x值,不是嗎? –

+0

我大多指出,代碼甚至不會編譯(更少運行),這表明缺少發佈問題的研究 – YePhIcK

回答

2

您可以將數據發送到使用任何技術的大量的另一個線程,共享內存的消息(IPC和RPC),對磁盤文件...你可以找到一個如果你的谷歌是「生產者 - 消費者模式」,那麼套件就是你的需要這裏有一篇關於MSDN How to: Implement Various Producer-Consumer Patterns的文章。

至於表單中您要求的答案是您不能。即使你可以肯定地用你選擇的參數值調用函數,這個不會以某種方式奇蹟般地更新已經運行的函數在另一個線程某處的內部狀態。這將做什麼 - 它會......調用該函數並等待它完成並返回給調用者(如預期的那樣)。

相關問題