C ++线程获取每个循环的值

时间:2017-07-25 19:55:52

标签: c++ multithreading c++11

我最近开始学习c ++,现在我正在玩多线程。 我想要做的是在循环中获取当前值。

像这样:

std::atomic_int res(0);
void testThread(void){
  for(int i = 0; i < 5; i++)
    res += i;
}

int main(void){
  std::thread t(testThread);
  for(int i = 0; i < 5; i++){
    std::cerr << "res : " << res << std::endl;
  }
  t.join();
  return 0;
}

我知道这是错的,但我不知道如何解决它...我试图找到我们是如何做到的,但我找不到我想要的东西。

1 个答案:

答案 0 :(得分:0)

您的代码没有任何问题。你的线程功能刚刚完成得太快了。以下是 sleep_for()

的示例
atomic_int res = 0;
thread t([&]
{
    for (int i = 0; i < 5; ++i)
    {
        this_thread::sleep_for(chrono::seconds(1));
        res += i;
    }
});

for (int i = 0; i < 20; ++i)
{
    this_thread::sleep_for(chrono::milliseconds(400));
    cout << "res : " << res << endl;
}

t.join();

顺便说一句,我切换到了lambda表达式,因此不需要全局变量和全局函数。