mmo*_*cny 20 c++ iostream boost-thread
我正在编写一个阻止两个输入的应用程序istreams.
从两者中读取istream是同步(阻塞)调用,因此,我决定创建两个Boost::threads来进行读取.
这些线程中的任何一个都可以到达"结束"(基于接收的一些输入),并且一旦达到"结束",两个输入流都停止接收.不幸的是,我不知道哪个会这样做.
因此,我不能join()在两个线程上,因为只有一个线程(不能预定哪一个)将实际返回(解除阻塞).
我必须以某种方式强迫对方退出,但它被阻止等待输入,所以它本身不能决定是时候返回(条件变量或什么不是).
他们是一种方式:
istream"失败",或注意:
istreams就是cin编辑:
谢谢!
我认为没有办法跨平台执行此操作,但 pthread_cancel 应该是您正在寻找的。使用 boost 线程,您可以从线程获取native_handle ,并在其上调用pthread_cancel。
另外,更好的方法可能是使用 boost asio相当于对多个文件进行 select 调用。这样,一个线程将被阻塞等待输入,但它可能来自任一输入流。我不知道用 iostreams 做这样的事情有多容易。