我最近开始学习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;
}
我知道这是错的,但我不知道如何解决它...我试图找到我们是如何做到的,但我找不到我想要的东西。
答案 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表达式,因此不需要全局变量和全局函数。