2017-02-15 64 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的文章。

至于表单中您要求的答案是您不能。即使你可以肯定地用你选择的参数值调用函数,这个不会以某种方式奇迹般地更新已经运行的函数在另一个线程某处的内部状态。这将做什么 - 它会......调用该函数并等待它完成并返回给调用者(如预期的那样)。

相关问题