使用BOOST_ASIO_DISABLE_IOCP有什么缺点?

时间:2012-07-25 09:32:49

标签: c++ asynchronous boost-asio

我已阅读文档,并且我了解可以使用BOOST_ASIO_DISABLE_IOCP预处理程序定义来在Windows XP中的套接字上调用cancel()。然后,Boost库将使用基于select的解决方案,一切都应该正常工作。

如果这些陈述属实,基于select的方法有哪些缺点?为什么我们不应该总是定义BOOST_ASIO_DISABLE_IOCP


编辑1

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

1 个答案:

答案 0 :(得分:1)

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

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

  

不幸的是,在与最终应用程序集成之后,我就是   得到memmroy访问错误。

也许,你有几个使用Boost.Asio标头的模块,但没有为所有定义BOOST_ASIO_DISABLE_IOCP,导致ODR违规?