Jay*_*Jay 4 c windows multithreading
是否存在类似于pthread_cancel,pthread_testcancel等的Windows本机API?
如果没有,我们如何使用Windows中的pthread_cancel机制模拟从另一个线程中取消一个线程?
在没有任何线程合作的情况下取消线程是不可能的.TerminateThread()API函数仅适用于进程关闭期间.是的,您可以使QueueUserAPC()工作,但仍然需要线程的合作.它必须阻塞等待句柄并明确表示它是可警告的(例如,WaitForSingleObjectEx的bAlertable参数).
由于QUA回调的异步特性,使其具有警报性需要在代码中花费大量精力.当地毯突然从地下拉出时,你必须确保不会泄漏线程使用的任何资源.很难做到,回调几乎没有上下文可以正确猜出需要清理的内容.除非你只在几个地方使线程警报.
但是,只要线程必须进行阻塞调用并且只能在几个地方进行警报,您也可以使用WaitForMultipleObjects().添加一个表示线程停止的事件.取消现在将通过同步,清理更容易.
如果它从不阻塞,你可以在线程的主循环内使用零超时的等待调用.由于缓存刷新,这相当昂贵.如果您不太关心响应时间,请使用挥发性bool.你不应该,反正它不是很确定.