我需要在多平台项目中使用WaitForMultipleObjects
的功能。
我可以从Boost中使用什么来取代它?Boost中的WaitForMultipleObjects功能
回答
我已经找到了这个问题的答案:不存在。
但是我发现和回答http://lists.boost.org/Archives/boost/2004/12/77175.php
希望将帮助他人
等待一个条件和等待多个对象不是它密切相关可能乍一看。 条件不包含状态,而您正在等待的句柄确实存在。状况只是表示状态改变已经出现。具体来说,是由互斥体保护的变量(组)的状态变化。 您需要具备的是在操作系统提供的句柄更改状态时发出某个条件。我结束了创建一个小类 “wfmo”与条件作为成员发出信号。该类具有用于添加 操作系统句柄的meber函数,并在内部创建一个阻塞WaitForMultipleObjects的线程。 返回时表示状态。
这是行得通的。但我认为它只是以务实的方式解决问题。 (并且恐怕由于附加线程的运行时间开销在某些情况下可能不可忽略)。为了避免使用额外的线程,您需要修改condition.wait()以接受您所使用的对象的句柄等待。内部等待当前使用WaitForSingleObject。 这将是一个简单的任务,以WaitForMultipleObjects替换它们。但是:您需要提供操作系统句柄!这打破了可移植性。 真正的问题是:Boost目前没有低级IO概念,它定义了它自己的IO句柄等。 虽然此主题已在列表中重复讨论过,但仍未提出(至少在正式情况下) 来解决这些问题。是的,有关于网络等方面的建议,但没有关于一般(低级别)IO的提议。 (论,我认为上面,网络应建)
这是从2004年起,boost :: asio现在应该是I/O处理库。 – Christopher 2012-08-14 20:17:37
@Christopher Boost :: asio没有WaitForMultipleObjects功能。我需要将一些Windows代码移植到Linux上,而我不想重新编写逻辑。 – cprogrammer 2012-08-20 14:10:55
不,它没有对WaitForMultipleObjects的直接支持,但通过使用select实现了一些等价物。我不知道你在找什么,(因为你没有说),但是声明,这种提升没有异步I/O库,现在(或多或少)是错误的。 – Christopher 2012-08-20 14:47:28
- 1. 的boost ::功能错误
- 2. 的boost ::功能一样类
- 3. WaitForMultipleObjects的崩溃
- 4. WaitForMultipleObjects和boost :: asio在多个windows :: basic_handle之间有什么区别?
- 5. Waiting on WaitForMultipleObjects
- 6. SerialPorts和WaitForMultipleObjects
- 7. WaitForMultipleObjects失败C++
- 8. boost为类功能创建组线程
- 9. 用Boost代替C++ 0x库功能
- 10. Boost Locale - 直接访问ICU功能
- 11. 不能存储的boost ::绑定功能的std ::地图
- 12. 在std或boost中有没有类似circular_advance的功能?
- 13. WaitForMultipleObjects和64个线程
- 14. boost :: mutex和boost :: timed_mutex的性能差异
- 15. Solr的MoreLikeThis和使用Boost功能(升压最近的项目)
- 16. 的boost ::线程加入的功能块调用线程
- 17. 存储的boost ::绑定功能于一身的std ::地图
- 18. 的boost ::功能和普通的函数指针:ambigous超载
- 19. 的boost ::功能和提高::拉姆达再次
- 20. 结合CUDA和Boost特殊功能的编译错误
- 21. Python模块给人的boost ::类似功能
- 22. 的boost ::功能和多参数成员函数
- 23. 的boost :: MPL类型列表功能应用
- 24. Boost是否提供打印uBLAS数据类型的功能?
- 25. 另一功能中的通话功能
- 26. AS3中的多功能功能
- 27. Excel中 - 呼叫功能的功能内
- 28. 功能在PHP中的功能
- 29. R功能中的代表功能
- 30. boost :: filesystem中的错误,这可能吗?
据我所知,如Linux等平台,没有直接等同于WaitForMultipleObjects的从WinAPI的 也许你应该看看升压: :condition_variable。 – 2012-08-14 11:09:12