C++ 使用socketio-client-c++;并加强asio_服务

C++ 使用socketio-client-c++;并加强asio_服务,c++,boost,websocket,socket.io,boost-asio,C++,Boost,Websocket,Socket.io,Boost Asio,我正试图将boost asio库(1.61)中的io_服务与socketio-client-c++一起使用,但我的代码引发了访问冲突异常,经过数小时的调试,我无法找出原因。在win_mutex.hpp中的以下位置引发异常: void lock() { -> ::EnterCriticalSection(&crit_section_); } 代码非常简单: int main(int argc, char* argv[]) { boost::asio::io_service

我正试图将boost asio库(1.61)中的io_服务与socketio-client-c++一起使用,但我的代码引发了访问冲突异常,经过数小时的调试,我无法找出原因。在win_mutex.hpp中的以下位置引发异常:

void lock()
{
 -> ::EnterCriticalSection(&crit_section_);
}
代码非常简单:

int main(int argc, char* argv[]) {
    boost::asio::io_service io_service;
    auto io_service_work = std::make_shared<boost::asio::io_service::work>      (io_service);

    sio::client client_;
    client_.connect("http://localhost:1337");

    // io_service.run();
}
intmain(intargc,char*argv[]){
boost::asio::io_服务io_服务;
自动io_服务_工作=标准::使_共享(io_服务);
sio::客户机;
客户端连接(“http://localhost:1337");
//io_service.run();
}
我想从main使用io_服务,而socketio在内部也使用io_服务,这可能是问题的原因

您可以下载包含socketio源代码和二进制文件的完整项目:ª

有什么建议吗


链接已编辑;链接(以前是88M,现在是443k)

因为该行只调用带有某个地址的公共Win32 API,所以当
指向随机的某个对象(例如,一个被破坏的
win_mutex
,其他对象,受保护的内存,甚至是nullptr)时,就会发生这种情况


这表明,。UB有无数可能的来源,而您的代码不足以得出任何结论。但是,在Asio中,99%的时间是由于没有将对象保留足够长的时间,以完成其上的异步操作。

我已将socketio项目转换为Dll,关闭boost auto link,并手动添加libboost_system-vc140-mt-gd-1_61.lib作为附加依赖项。然后代码按预期工作

但是,如果我将socketio项目切换回静态库,则会出现与问题中所述相同的症状

请在此处检查基于Dll的项目文件:

(现在仍在查看压缩后的邮政编码)给定的代码对我来说很有用(当然,1337端口上没有任何内容可以监听):哦,有趣的东西。以下是我基于Linux的测试顺便说一句:(使用Makefile;
apt get install build sential make rapidjson dev libboost all dev libwebsocketpp dev;make&./test
)我怀疑这是一个仅限windows的问题,与boost自动链接或静态和动态库链接有关。毫无疑问:)@BLZGET更接近问题的根源,似乎if条件在静态库版本中的计算方式不同于在dll版本中的计算方式。您可以在此处找到更详细的描述和调查: