Boost :: Asio失败为async_connect创建线程

时间:2012-02-08 18:48:30

标签: c++ multithreading sockets boost pthreads

我遇到了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));

0 个答案:

没有答案
相关问题