我在写一个应用程序,它阻止来自两个istreams
的输入。杀死阻塞的Boost ::线程
从istream
读取的是一个同步(阻塞)调用,所以我决定创建两个Boost::thread
来完成读取。
这些线程中的任何一个都可以到达“结束”(根据收到的某些输入),一旦达到“结束”,两个输入流都会停止接收。不幸的是,我不知道哪个会这样做。
因此,我不能在两个线程上都使用join()
,因为只有一个线程(不能预先确定哪一个)会实际返回(取消阻塞)。
我必须以某种方式迫使另一个退出,但它被阻止等待输入,所以它不能自己决定是时候返回(条件变量或不是)。
是他们的一种方式之一:
- 发送信号,一个boost ::线程,或
- 力
istream
为 “失败”,或 - 杀死一升压::主题?
注:
- 其中
istreams
的是cin
- 我试图重新启动的过程中,所以我不能关闭,禁止他们正在重置的方式输入流。
编辑:
- 达到了“结束”时,我知道,我知道哪个线程已成功完成,并需要被杀害。我需要弄清楚它的杀戮(或者从一个istream中读取不同的策略)。
- 我需要两个线程退出并清理正确:(
谢谢!
幸运的是,我现在正在为linux机器开发,但更喜欢便携式版本。感谢你! – mmocny 2008-11-07 17:13:31
pthread_cancel()在类似的情况下没有为我设置它,甚至不把它的取消类型设置为ASYNCHRONOUS。 – gatopeich 2011-03-21 12:24:19