有些线程是作为长时间工作的,其运行函数内部都会有个无限循环,但是某些时候我们希望能够主动停止线程:如人为停止或某一条件满足后退出。
这里我们首先看看一个简单的思路:要想从一个线程终止另外一个线程,我们可以设置一个flag,这两个线程均可以访问的到,于是需要被中断的线程只需要检测这个flag的状态是否被改变,并由此作出是否中断的决定。
这里是一个例子:
class thread_class {
public:
thread_class():isFinish(false){}
void thread_run() {
while (!isFinish) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::cout << "still run" << std::endl;
}
}
void setFinish() {
isFinish = true;
}
private:
std::atomic<bool> isFinish;
};
int main()
{
thread_class tc;
std::thread t(&thread_class::thread_run, &tc);
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
tc.setFinish();
t.join();
std::cout << "thread finish" << std::endl;
return 0;
}