我需要WaitForMultipleObjects
多平台项目中的功能。
我可以从 Boost 中使用什么来代替它?
1 回答
我找到了这个问题的答案:不存在。
但是我在http://lists.boost.org/Archives/boost/2004/12/77175.php上找到并回答了
希望对其他人有所帮助
乍一看,等待一个条件和等待多个对象并不密切相关。条件不带有状态,而您正在等待的句柄可以。条件只是表示出现了状态变化。特别是受互斥锁保护的某个(组)变量的状态变化。您宁愿需要的是,当操作系统提供的句柄更改状态时,会发出某个条件的信号。我最终创建了一个小类“wfmo”,条件是作为成员发出信号。该类具有添加操作系统句柄的成员函数,并在内部创建一个阻塞 WaitForMultipleObjects 的线程。返回时,它会发出条件信号。
这是有效的。但是我认为它确实只是以务实的方式解决了这个问题。(而且我担心在某些情况下,由于额外线程导致的运行时开销可能不可忽略。)要取消额外的线程,您需要修改 condition.wait() 以接受您正在等待的对象的句柄为了。在内部,等待当前使用 WaitForSingleObject。用 WaitForMultipleObjects 替换它们将是一项简单的任务。但是:您需要提供操作系统句柄!这破坏了便携性。真正的问题是:Boost 目前没有低级 IO 概念,定义了自己的 IO 句柄等。尽管该主题已在列表中反复讨论,但仍然没有任何提案(至少是正式的)解决这些问题。是的,有关于网络等的提议,但没有关于一般(低级)IO 的提议。(在此之上,我认为应该建立网络。)