1
6
不需要线程本身的任何合作就取消线程是不可能的。TerminateThread()API函数仅适用于进程关闭期间。是的,您也可以使queueuserapc()工作,但这仍然需要线程的合作。它必须阻塞一个等待句柄,并明确地表示它是可警报的(例如,waitforsingleobjectex的balertable参数)。 由于qua回调的异步性质,使其可发出警报需要在代码中进行大量的工作。当地毯突然从下面被拉出时,你必须确保你不会泄漏线程使用的任何资源。很难做到,回调没有足够的上下文来正确猜测需要清理的内容。除非只在少数地方使线程具有警报性。 但是,只要线程必须进行阻塞调用,并且只能在少数地方发出警报,那么您也可以使用waitForMultipleObjects()。添加一个向线程发出停止信号的事件。现在可以同步取消,清理更容易。 如果线程的主循环从不阻塞,则可以在其主循环中使用具有零超时的等待调用。由于缓存刷新,这相当昂贵。如果你不太在乎响应时间,就用一个易变的bool。你不应该,反正也不是很确定。 |
2
2
这个 Pthreads/win32 FAQ 在第9个问题中谈到这个问题,“取消对我不起作用,为什么?”.faq提到pthreads库使用名为“queueuserapcex”的包来实现真正的异步用户模式通知。您的问题不清楚您是否使用pthreads/win32,但是您可以在 Pthreads/win32 source code . |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
rhymes · 如何让线程操作相同的java列表 2 年前 |