Multithreading Boost ASIO共享库问题
我基本上是基于ASIO文档中的序列化示例构建一个共享库,我的意思是使用-shared和-fpic选项编译生成一个.so文件,其中包括hook/wrappers 我正在对另一个进程运行我的共享库,然后我的代码通过库中的构造函数运行(如Windows上的DLLMain) 我知道我的代码正在执行,并且在某一点之前运行良好。基本上,我的问题是试图将ASIO和我的网络代码放到另一个线程上。我使用以下代码来实现这一点:Multithreading Boost ASIO共享库问题,multithreading,gcc,boost,boost-asio,shared,Multithreading,Gcc,Boost,Boost Asio,Shared,我基本上是基于ASIO文档中的序列化示例构建一个共享库,我的意思是使用-shared和-fpic选项编译生成一个.so文件,其中包括hook/wrappers 我正在对另一个进程运行我的共享库,然后我的代码通过库中的构造函数运行(如Windows上的DLLMain) 我知道我的代码正在执行,并且在某一点之前运行良好。基本上,我的问题是试图将ASIO和我的网络代码放到另一个线程上。我使用以下代码来实现这一点: asio::io_service io_service; server server(i
asio::io_service io_service;
server server(io_service, port);
asio::thread t(boost::bind(&asio::io_service::run, &io_service));
现在,由于这段代码在库中的构造函数中运行,is抛出了一个seg错误,我不知道为什么。如果我将其替换为:
asio::io_service io_service;
server server(io_service, port);
io_service.run();
代码运行100%正常,只是它窃取了整个执行线程,钩住的进程根本不会运行。有人能帮我吗?我真的很困惑
干杯这似乎是一个终生的问题 如果库中的函数中包含以下代码:
void some_function()
{
asio::io_service io_service;
server server(io_service, port);
asio::thread t(boost::bind(&asio::io_service::run, &io_service));
}
然后,每当函数返回时,io\u服务将超出范围,在新生成的线程尝试处理事件循环时被销毁。考虑更改它,使<>代码> IoService < /C> >和 Server < /C> >至少延伸到线程的持续时间:
void server_run()
{
asio::io_service io_service;
server server(io_service, port);
io_service.run();
}
...
asio::thread t(&server_run);
这似乎是一个终生的问题
如果库中的函数中包含以下代码:
void some_function()
{
asio::io_service io_service;
server server(io_service, port);
asio::thread t(boost::bind(&asio::io_service::run, &io_service));
}
然后,每当函数返回时,io\u服务将超出范围,在新生成的线程尝试处理事件循环时被销毁。考虑更改它,使<>代码> IoService < /C> >和 Server < /C> >至少延伸到线程的持续时间:
void server_run()
{
asio::io_service io_service;
server server(io_service, port);
io_service.run();
}
...
asio::thread t(&server_run);
我怀疑,这与对象生命周期有关。是否在asio::thread语句之后使用t.join()?我怀疑,这与对象生命周期有关。是否在asio::thread语句之后使用t.join()?