让我们说我的类在其构造函数中运行一个线程,进行后台处理,并希望在析构函数中杀死该线程。
我们通常会设置一些标志,以便主线知道它应该退出,然后调用thread::join
。但是如果线程正在忙着进行一些长时间的操作 - 甚至卡住(让我们说它等待某些东西等等)会怎么样?join
永远不会返回?< / p>
我无法在join
terminate
上将超时参数传递给std::thread
并且没有setInterval(function () {
position.x = $('#crystalship_exhaust').offset().left;
position.y = $('#crystalship_exhaust').offset().top;
}, 100);
方法,我可以看到(http://en.cppreference.com/w/cpp/thread/thread)
我知道在一个精心设计的程序中,这不应该被允许发生但是......
答案 0 :(得分:1)
没有强制杀死线程的标准工具。选项包括:
detach
让它永远运行(直到程序退出)。thread::native_handle()
成员获取基础句柄。然后使用你的平台库(pthread,或WinAPI或其他任何东西)来杀死线程。至于如何检测这种情况,您可以使用两个atomic<bool>
变量,stop
和finished
。设置第一个,您将指示线程停止。线程将定期检查此变量,如果设置,将停止其活动,然后设置finished
并退出。您的主程序将等待一段时间(可能在循环中)设置finished
,如果是,请致电join
。如果没有,(意味着线程没有响应),请使用上述两种解决方案之一。