gpt4 book ai didi

c++ - 如何处理请求时可能不会终止的线程?

转载 作者:行者123 更新时间:2023-11-28 05:59:32 25 4
gpt4 key购买 nike

假设我的类在其构造函数中运行一个线程,以进行后台处理,并希望在析构函数中终止该线程。

我们通常会设置一些标志,以便主线程知道它应该退出,然后调用 thread::join。但是,如果线程正忙于执行一些长时间的操作 - 甚至卡住(假设它被阻塞等待某事) - join永远返回怎么办?

没有办法将超时参数传递给 join 并且 std::thread 上没有 terminate 方法我可以看到(http://en.cppreference.com/w/cpp/thread/thread )

我知道在一个设计良好的程序中不应该允许这种情况发生但是...

最佳答案

没有标准工具可以强制终止线程。选项是:

  • detach让它永远自行运行(直到程序退出)。
  • 使用thread::native_handle()成员获取底层句柄。然后使用您的平台库(pthread、WinAPI 或其他任何东西)来终止线程。

至于如何检测这种情况,可以用,比如两个atomic<bool>变量,stopfinished .设置第一个,您将指示线程停止。线程将定期检查此变量,如果已设置,将停止其事件,然后设置 finished并退出。您的主程序将等待一段时间(可能在循环中)finished。设置,如果是,请调用 join .如果没有,(意味着线程没有响应),请使用上述两种解决方案之一。

关于c++ - 如何处理请求时可能不会终止的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com