C ++ 11如何将数据传递给正在运行的线程

时间:2017-02-15 17:32:23

标签: multithreading c++11

假设我使用async在单独的线程中调用函数,函数等待输入数据(数据的间隔为2-3秒)。我可以将数据传递给在单独线程中运行的函数吗?例如:

 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 个答案:

答案 0 :(得分:2)

您可以使用多种技术将数据发送到另一个线程,从共享内存到消息(包括IPC和RPC),再到磁盘上的文件...如果你谷歌搜索,你可以找到满足你需求的那个“生产者 - 消费者模式”。这是关于MSDN How to: Implement Various Producer-Consumer Patterns的一篇这样的文章。

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