我遇到了Boost :: Asio函数async_connect的问题。
我有一个可以在2种模式下运行的应用程序,客户端和服务器。我使用来自boost Asio的TCP套接字。 当我在Linux上编译时,一切正常,我可以运行客户端和服务器并将每个连接在一起。但是,当我交叉编译时 使用MinGW的Windows,客户端在async_connect()上崩溃。以下是从Windows 7上的try..catch记录的错误消息:
thread:引用的对象类型
不支持尝试的操作
所以,我有一些线索:
我使用pthread而不是Boost.Thread来运行io_service :: run()。我有多个引擎在使用pthread创建的不同线程中运行,并且在windows和linux上都能正常工作。所以,我也希望用pthread运行io_service。
如果我只使用Boost.Thread运行io_service,我在编译时遇到错误:
boost / config / requires_threads.hpp:29:4:错误:#error“线程支持不可用:已使用BOOST_DISABLE_THREADS显式禁用”
我在official documentation for Windows平台中找到了:
每个io_service的附加线程用于选择多路分解。该线程是在第一次调用async_connect()时创建的。
我的应用程序在调用async_connect时崩溃,所以我认为Boost无法使用pthread或类似的东西创建线程。
我尝试了不同的#define,但没有任何效果,我不确定我是否理解所有这些:
-D _WIN32_WINNT=0x0601
-D BOOST_USE_WINDOWS_H
-D BOOST_WINDOWS
-D WIN32_LEAN_AND_MEAN
-D BOOST_HAS_PTHREADS
-D BOOST_HAS_THREADS
这是我的async_connect函数:
socket.async_connect(_ep,boost::bind(&tcp_client::handle_connect,this,new_connection,boost::asio::placeholders::error));