我对终止/停止/杀死 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 字节)。处理此问题的最佳方法是什么?
最佳答案
没有停止另一个线程的规定;无论是分离的还是可连接的。
停止线程的唯一方法是让线程从初始线程函数返回。
在这种特殊情况下,我建议进行以下更改:
- 不要拆线。在 main() 中实例化它。
- 添加一个 bool 值和一个
std::mutex
,bool 被初始化为false
- 每次通过线程的内部循环,使用
std::unique_lock
锁定互斥体,获取 bool 值,然后解锁互斥体。解锁互斥量后,如果 bool 为true
,则跳出循环并返回。 - 在 main() 中,退出前:锁定互斥量,将 bool 标志设置为
true
,解锁互斥量,然后加入线程
这并不完美,因为第二个线程最多需要五秒钟来检查 bool 标志并返回。但是,这将是第一步。
关于c++ - 如何终止或停止 C++ 中的分离线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655706/