加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows API类似于pthread_cancel?

发布时间:2020-12-14 04:01:34 所属栏目:Windows 来源:网络整理
导读:是否存在类似于pthread_cancel,pthread_testcancel等的 Windows本机API? 如果没有,我们如何使用Windows中的pthread_cancel机制模拟从另一个线程中取消一个线程? 解决方法 在没有任何线程合作的情况下取消线程是不可能的. TerminateThread()API函数仅适用于
是否存在类似于pthread_cancel,pthread_testcancel等的 Windows本机API?

如果没有,我们如何使用Windows中的pthread_cancel机制模拟从另一个线程中取消一个线程?

解决方法

在没有任何线程合作的情况下取消线程是不可能的. TerminateThread()API函数仅适用于进程关闭期间.是的,您可以使QueueUserAPC()工作,但仍然需要线程的合作.它必须阻塞等待句柄并明确表示它是可警告的(例如,WaitForSingleObjectEx的bAlertable参数).

由于QUA回调的异步特性,使其具有警报性需要在代码中花费大量精力.当地毯突然从地下拉出时,你必须确保不会泄漏线程使用的任何资源.很难做到,回调几乎没有上下文可以正确猜出需要清理的内容.除非你只在几个地方使线程警报.

但是,只要线程必须进行阻塞调用并且只能在几个地方进行警报,您也可以使用WaitForMultipleObjects().添加一个表示线程停止的事件.取消现在将通过同步,清理更容易.

如果它从不阻塞,你可以在线程的主循环内使用零超时的等待调用.由于缓存刷新,这相当昂贵.如果您不太关心响应时间,请使用挥发性bool.你不应该,反正它不是很确定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读