У меня проблема с функцией 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));