Boost :: Asio не удалось создать поток для async_connect - PullRequest
1 голос
/ 08 февраля 2012

У меня проблема с функцией async_connect Boost :: Asio.

У меня есть приложение, которое может работать в 2 режимах: клиент и сервер.Я использую TCP-сокет от boost Asio.Когда я компилирую в Linux, все работает нормально, я могу запустить клиент и сервер и соединить их вместе.Но когда я выполняю кросс-компиляцию в Windows с MinGW, происходит сбой клиента в async_connect ().Вот сообщение об ошибке, зарегистрированное из try..catch в windows 7:

thread: Предпринятая операция не поддерживается для типа объекта, на который ссылаются

Итак, яесть некоторые подсказки:

Я использую pthread вместо Boost.Thread для запуска io_service :: run ().У меня есть несколько движков, работающих в разных потоках, созданных с помощью pthread, и они отлично работают как в Windows, так и в Linux.Итак, я хочу запустить io_service с pthread.

Если я использую Boost.Thread только для запуска io_service, я получаю сообщение об ошибке при компиляции:

boost / config / require_threads.hpp: 29: 4: ошибка: #error "Поддержка потоков недоступна: она была явно отключена с помощью BOOST_DISABLE_THREADS"

Я нашел в официальной документации для платформы 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));
...