我需要在一个多平台项目的WaitForMultipleObjects的功能。
我可以使用Boost中的什么来替换它?
发布于 2012-08-14 23:46:47
我找到了这个问题的答案:不存在。
然而,我在http://lists.boost.org/Archives/boost/2004/12/77175.php上找到并回答了
希望对其他人有所帮助
等待一个条件和等待多个对象并不像乍一看那样紧密相关。条件不携带状态,而您正在等待的句柄携带状态。条件只是简单地表示出现了状态更改。具体地说,由互斥锁保护的ceratin (一组)变量的状态改变。你需要的是,当操作系统提供句柄改变状态时,发出信号通知某个特定的条件。最后,我创建了一个小类"wfmo“,其条件是作为成员发送信号。该类具有添加操作系统句柄的meber函数,并在内部创建了一个在WaitForMultipleObjects上阻塞的线程。在返回时,它发出条件信号。
这是有效的。然而,我认为它只是以一种务实的方式解决了这个问题。(我担心在某些情况下,由额外线程引起的运行时开销可能是不可忽略的。)要删除额外的线程,您需要修改condition.wait()以接受您正在等待的对象的句柄。在内部,等待当前使用WaitForSingleObject。用WaitForMultipleObjects替换它们将是一项简单的任务。但是:你需要提供操作系统句柄!这就破坏了可移植性。真正的问题是: Boost目前没有低级IO概念,它定义了自己的IO句柄等。尽管在清单上重复讨论了这一主题,但仍然没有解决这些问题的提案(至少是正式提案)。是的,已经有了关于网络之类的建议,但没有关于通用(低级) IO的建议。(我认为应该在此基础上建立网络。)
https://stackoverflow.com/questions/11950808
复制相似问题