0
我有一个类与运行这样一个线程:中断分离的boost ::线程
class MyClass
{
public:
void Start();
void Stop();
void Run();
private:
boost::thread mThread;
bool mThreadShouldRun;
}
void MyClass::Start()
{
mThreadShouldRun = true;
mThread = boost::thread(&MyClass::Run, this);
}
void MyClass::Stop()
{
mThreadShouldRun = false;
mThread.interrupt();
}
void MyClass::Run()
{
while(mThreadShouldRun)
{
//DO Something
try {
boost::this_thread::sleep_for(boost::chrono::seconds(15));
} catch(boost::thread_interrupted interrupt) {
break;
}
}
}
这段代码是做什么的我期待:启动一个后台线程并停止它的需求。
但是根据this question的答案join()
或detach()
应该总是被调用。 join()
是不是我需要在我的情况,所以我去detach()
:
void MyClass::Start()
{
mThreadShouldRun = true;
mThread = boost::thread(&MyClass::Run, this);
mThread.detach();
}
线程仍在运行的预期,但mThread
成为Not-a-Thread,我再也不能中断它在Stop()
方法,因为mThread没有长引用在致电detach()
之后线程。
我真的应该叫detach()吗?如果是的话如何中断()分离的线程?
你有mThreadShouldRun变量,只需添加一个互斥体的叫停形成主线程 – Netwave
如果我的线程是睡觉,这是大多数情况下,我希望能够立即停止它。不可能与mThreadShouldRun – grunk
好吧,要编辑答案然后 – Netwave