我需要一些帮助来解决这个例外,我正在实现一个NPAPI插件,以便能够使用浏览器扩展中的本地套接字,为此,我正在使用Firebreath框架。
对于套接字和连接,我将Boost asio与异步调用和5个工作线程的线程池结合使用。
此外,我每个线程都有一个最后期限来实现传输超时。
我的插件扩展工作流程如下:
-
打开套接字1(这将启动async_receive和截止日期
异步等待)
-
写入插槽1
-
获取响应1
-
打开另一个插座2
-
写入插槽2
-
写入套接字1
-
关闭插座1
(socket.caccel(),deadline.caccel),socket.shutdown(),套接字
释放)。
-
获取响应2
-
写入套接字2
-
关闭插座2
由于所有东西都是跨语言的,异步真的很难调试,但所有的打开、写入或关闭都是从javascript调用的,而从套接字1读取则按顺序调用打开2、写入2、写入1和关闭1。
也许我所说的每一件事都是无关的,因为当抛出异常时,调用堆栈不会显示我的任何函数,只显示它在
malloc
呼叫
_heap_alloc_dbg_impl
事实上,它通常在第二个或第三个完整循环中失败,并且似乎发生在步骤5和7之间。
但是,我认为这一定与asio有关,因为用一个工作线程做任何事情都会在第一个循环中出现异常而崩溃。
如果您需要,我愿意发布更多信息代码。
更新1:
更新2:
共有10个线程启动:
workPtr.reset( new boost::asio::io_service::work(io_service));
for ( int i = 0; i < 10; ++i) {
m_threadGroup.create_thread( boost::bind(&boost::asio::io_service::run, &io_service) );
}
第11次线程启动我不知道是谁启动的
在另一个线程(而不是VS声称导致崩溃的线程)上,有一个
join_all()
正在处理中,因为我的类正在被销毁,但我认为它不应该被销毁,所以这次崩溃可能是由于另一个异常和Firebreath进程导致的,当它崩溃时,它会关闭所有东西。