Windows API类似于pthread_cancel?

是否有一个Windows的本地API类似于pthread_cancel,pthread_testcancel等?

如果不是,我们如何在Windows中使用pthread_cancel机制来模拟取消另一个线程?

Solutions Collecting From Web of "Windows API类似于pthread_cancel?"

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

由于QUA回调的异步特性,使得代码的可警性需要您的代码付出很大的努力。 当地毯突然从地下拔出时,您必须确保不会泄漏任何线程使用的资源。 很难做,回调没有什么上下文可以正确猜测需要清理的东西。 除非您只在几个地方使线程可警报。

但是,只要线程必须进行阻塞调用,并且只能在几个地方提醒,那么也可以使用WaitForMultipleObjects()。 添加一个事件,通知线程停止。 现在取消将通过同步,清理更容易。

如果线程永不阻塞,可以在线程的主循环中使用一个具有零超时的等待调用。 由于缓存刷新,这相当昂贵。 如果您不太在意响应时间,请使用易变的布尔值。 你不应该,反正也不是很确定。

Pthreads / win32常见问题在第9个问题中提到:“取消对我不起作用,为什么?”。 FAQ提到Pthreads库,使用一个名为“QueueUserAPCEx”的包来实现真正的异步用户模式通知。 从你的问题中不清楚你是否使用Pthreads / win32,但你可能会在Pthreads / win32源代码中找到一些提示和实现细节。