2012-08-14 76 views
4

我需要在多平台项目中使用WaitForMultipleObjects的功能。
我可以从Boost中使用什么来取代它?Boost中的WaitForMultipleObjects功能

+2

据我所知,如Linux等平台,没有直接等同于WaitForMultipleObjects的从WinAPI的 也许你应该看看升压: :condition_variable。 – 2012-08-14 11:09:12

回答

3

我已经找到了这个问题的答案:不存在。

但是我发现和回答http://lists.boost.org/Archives/boost/2004/12/77175.php

希望将帮助他人

等待一个条件和等待多个对象不是它密切相关可能乍一看。 条件不包含状态,而您正在等待的句柄确实存在。状况只是表示状态改变已经出现。具体来说,是由互斥体保护的变量(组)的状态变化。 您需要具备的是在操作系统提供的句柄更改状态时发出某个条件。我结束了创建一个小类 “wfmo”与条件作为成员发出信号。该类具有用于添加 操作系统句柄的meber函数,并在内部创建一个阻塞WaitForMultipleObjects的线程。 返回时表示状态。

这是行得通的。但我认为它只是以务实的方式解决问题。 (并且恐怕由于附加线程的运行时间开销在某些情况下可能不可忽略)。为了避免使用额外的线程,您需要修改condition.wait()以接受您所使用的对象的句柄等待。内部等待当前使用WaitForSingleObject。 这将是一个简单的任务,以WaitForMultipleObjects替换它们。但是:您需要提供操作系统句柄!这打破了可移植性。 真正的问题是:Boost目前没有低级IO概念,它定义了它自己的IO句柄等。 虽然此主题已在列表中重复讨论过,但仍未提出(至少在正式情况下) 来解决这些问题。是的,有关于网络等方面的建议,但没有关于一般(低级别)IO的提议。 (论,我认为上面,网络应建)

+0

这是从2004年起,boost :: asio现在应该是I/O处理库。 – Christopher 2012-08-14 20:17:37

+0

@Christopher Boost :: asio没有WaitForMultipleObjects功能。我需要将一些Windows代码移植到Linux上,而我不想重新编写逻辑。 – cprogrammer 2012-08-20 14:10:55

+0

不,它没有对WaitForMultipleObjects的直接支持,但通过使用select实现了一些等价物。我不知道你在找什么,(因为你没有说),但是声明,这种提升没有异步I/O库,现在(或多或少)是错误的。 – Christopher 2012-08-20 14:47:28