c++ - 使用 BOOST_ASIO_DISABLE_IOCP 有什么缺点?

标签 c++ asynchronous boost-asio

我已经阅读了文档并且我知道可以使用 BOOST_ASIO_DISABLE_IOCP 预处理器定义来在 Windows XP 的套接字上调用 cancel()。然后,Boost 库将改用基于 select 的解决方案,一切都会正常进行。

如果这种说法是正确的,那么基于select 的方法有哪些缺点?为什么我们不应该总是定义 BOOST_ASIO_DISABLE_IOCP


编辑 1

我已经编译了定义了 BOOST_ASIO_DISABLE_IOCP 的 DLL,没有问题。不幸的是,在与最终应用程序集成后,我遇到了内存访问错误。我还缺少任何其他配置吗?

最佳答案

IOCP 应该提供很多更好的性能。

顺便说一句,你真的必须使用取消吗?请注意,在您取消套接字上的 i/o 操作后,您不知道数据流的实际状态是什么,因此您需要一种复杂的方法来与您的对等方同步。因此,通常正确的做法是关闭套接字。

Unfortunately, after the integration with the final application, I'm getting memmroy access errors.

也许,您有几个使用 Boost.Asio header 的模块,但没有为它们所有定义 BOOST_ASIO_DISABLE_IOCP,导致 ODR 违规?

关于c++ - 使用 BOOST_ASIO_DISABLE_IOCP 有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646765/

相关文章:

java - 异步 EJB 上的 JTA 事务

c# - 带有 BeginReceive\EndReceive 的异步套接字意外数据包

c++ - 向给定 remote_endpoint 对象和套接字的客户端发送数据包?

c++ - 如何将过程/函数值获取到最终程序中?

c++ - 找出调用 __fastfail 的原因

c++ - 使用大线程池调试多线程 C++ 应用程序

flash - 如何在 Actionscript 3 中对事件进行排序

c++ - Boost::asio::async_read 不会按条件停止

c++ - boost::asio::deadline_timer 在计时器处理程序中完成 async_read() 和 async_write() 后不会过期

php - 如何像php一样在C++中实现一个非连续的动态矩阵?