- 主题:std thread是不是没办法强制中断
没有terminate 或者 interrupt 方法。
--
FROM 223.104.213.*
底层还是pthread吧,可以pthread_self,然后告诉别人,有点绕。
【 在 grainbuds 的大作中提到: 】
: 没有terminate 或者 interrupt 方法。
: --
:
发自「今日水木 on M2007J17C」
--
FROM 36.143.59.*
所以如果是纯 IO 的话,强烈建议你们使用协程。可以被中断是协程的重要优势。
【 在 grainbuds (hello) 的大作中提到: 】
: 没有terminate 或者 interrupt 方法。
--
FROM 140.224.35.*
从设计看上,从外部中断线程并不是好的设计。正确的做法是应该告诉线程,你可以退出了,然后线程做好资源清理等收尾工作后自己退出。
所以问题就是如何通知线程可以退出了,这个方法就很多了。最简单的全局变量,条件变量等等
【 在 grainbuds 的大作中提到: 】
: 没有terminate 或者 interrupt 方法。
: --
: FROM 223.104.213.*
--来自微水木3.5.11
--
FROM 140.206.195.*
只要约定在事件等待或者 IO 等待的时候允许中断就行了。Java 的线程已经接近完美,所有 Lock 的 acquire() 都可能抛出 InterruptedException,可惜 IO 事件没有。
C++ 如果遵循 RAII,保证抛出异常的时候能够销毁资源,也可以这么干。不过对于在阻塞和 IO 的时候,需要包装一下相关的 API,退出后检测线程状态并抛出异常。
【 在 KillnCov (KillnCov) 的大作中提到: 】
: 从设计看上,从外部中断线程并不是好的设计。正确的做法是应该告诉线程,你可以退出了,然后线程做好资源清理等收尾工作后自己退出。
: 所以问题就是如何通知线程可以退出了,这个方法就很多了。最简单的全局变量,条件变量等等
: --来自微水木3.5.11
: ...................
--
修改:hgoldfish FROM 47.243.39.*
FROM 140.224.35.*
擦,这都要屏蔽

【 在 grainbuds 的大作中提到: 】
: 没有terminate 或者 interrupt 方法。
--
FROM 114.245.195.*
主要是有时候在执行较为耗时的工作,程序接收退出命令时不想等待太长时间,或是线程内发生异常,无法正常退出。
--
FROM 101.80.112.*
耗时的busy工作要拆分为更细点的片段,便于间隙里检查退出标志。
线程内异常是啥
【 在 grainbuds 的大作中提到: 】
: 主要是有时候在执行较为耗时的工作,程序接收退出命令时不想等待太长时间,或是线程内发生异常,无法正常退出。
--
FROM 114.245.195.*
程序出bug了这种
【 在 z16166 (Netguy) 的大作中提到: 】
: 耗时的busy工作要拆分为更细点的片段,便于间隙里检查退出标志。
:
: 线程内异常是啥
:
--
FROM 101.80.112.*
出bug就解决bug
出bug了,已经可能处于未知/未定义状态,不要指望有啥好的救命稻草灵丹妙药
【 在 grainbuds 的大作中提到: 】
: 程序出bug了这种
: :
--
FROM 114.245.195.*