Хорошо, я серьезно не могу понять это.boost :: asio :: io_service исключает исключение
У меня есть проект DLL в MSVC, который пытается использовать Asio (от Boost 1.45.0), но всякий раз, когда я создаю свой io_service, генерируется исключение. Вот то, что я делаю для испытательных целей:
void run()
{
boost::this_thread::sleep(boost::posix_time::seconds(5));
try
{
boost::asio::io_service io_service;
}
catch (std::exception & e)
{
MessageBox(NULL, e.what(), "Exception", MB_OK);
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
boost::thread thread(run);
}
return TRUE;
}
Это то, что окно сообщения показывает:
Winsock: WSAStartup не может функционировать в это время, так как основная система использует для предоставления сетевых услуг является в настоящее время недоступен
Вот что говорит об этом MSDN (код ошибки 10091, WSASYSNOTREADY):
Сетевая подсистема недоступна. Эта ошибка возвращается WSAStartup, если реализация Windows Sockets не может функционировать, поскольку базовая система, используемая для предоставления сетевых услуг, в настоящее время недоступна. Пользователи должны проверить: что соответствующий DLL-файл Windows Sockets находится в текущем пути. То, что они не пытаются одновременно использовать несколько приложений Windows Sockets. Если в вашей системе имеется более одной DLL Winsock, убедитесь, что первый в пути подходит для загруженной сетевой подсистемы. Документация по внедрению Windows Sockets, чтобы убедиться, что все необходимые компоненты установлены и настроены правильно.
Однако все это не относится ко мне (или, как я полагаю).
Вот моя командная строка:
/O2/GL/D "_WIN32_WINNT = 0x0501"/D "_WINDLL"/FD/EHsc/MD/Gy/Fo "Release \"/Fd "Release \ vc90.pdb "/ W3/WX/nologo/c/TP/errorReport: prompt
Если кто знает, что может быть неправильным, пожалуйста, помогите мне! Благодарю.
Где еще может быть создана нить? Это единственная точка входа, правильно? – DSB
Что случилось с созданием любого потока (IO или нет) в DllMain? какая разница между IO и другими потоками в этой области? –
Ну, я, наконец, исправил это, просто поместив io_service за пределы этой конкретной DLL. Независимо от того, что вы предложили, действительно проблема, это действительно привело меня к решению, поэтому спасибо. – DSB