【发布时间】:2017-03-29 13:54:49
【问题描述】:
我有一个函数 (messageArrived),它在一个新线程中调用一个函数 (setAnimation)。如何访问在 messageArrived 函数中定义的布尔值并在第二个线程中访问它?
如果有新消息我想终止第二个线程(setAnimation)。我认为布尔值是“终止”线程的唯一方法。
#include <thread>
bool start = false;
void setAnimation(std::string msg){
start = true;
while(start){
//do something
}
return;
}
int messageArrived(std::string message){
start = false;
std::thread t1(setAnimation, message);
t1.detach();
return 1;
}
上面的代码只是澄清我的问题的一个例子。
【问题讨论】:
-
与任何其他函数一样,您需要通过指向函数的指针/引用来传递它。
-
局部变量在定义它们的范围内是局部的。线程不会改变这一点。
-
这没什么意义,因为当
messageArrived返回时,start不复存在,因此您无法访问。 -
@Janoshh 你已经有了你想要的。只需将该布尔值设为
std::atomic<bool>即可避免竞争条件。我不得不说这是设计上的一场灾难,但它应该可以工作。 -
@TheQuantumPhysicist:好的!你有更好的设计建议吗?
标签: c++ multithreading c++11 boolean thread-safety