我有兴趣在 C++ 中终止/停止/杀死一个分离的线程。如何才能做到这一点?
void myThread()
{
int loop = 0;
while(true)
{
std::this_thread::sleep_for(std::chrono::seconds(5));
++loop;
}
}
void testThread()
{
std::thread globalThread(myThread);
globalThread.detach();
}
int main(void)
{
testThread();
for(unsigned int i=0; i < 1000; i++)
{
cout << "i = " << i << endl;
}
return 0;
}
我想“停止”/“终止” globalThread() 的原因是因为 valgrind 列出了这是一种“可能丢失”的内存泄漏类型(152 字节)。处理这个问题的最佳方法是什么?
原文由 code 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有规定停止另一个线程;无论是分离的,还是可连接的。
停止线程的唯一方法是让线程从初始线程函数返回。
在这种特殊情况下,我建议进行以下更改:
std::mutex
,布尔值被初始化为false
std::unique_lock
锁定互斥锁,取布尔值,然后解锁互斥锁。解锁互斥锁后,如果 bool 为true
,则跳出循环并返回。true
,解锁互斥体,然后加入线程这并不完美,因为第二个线程最多需要五秒钟来检查 bool 标志并返回。但是,这将是第一步。