C++ C+的含义+/pthread/join错误消息";what():无效参数";
它是一个更大应用程序的一部分,是一个简单的计时器线程,在尝试完成它之前可以正常工作:C++ C+的含义+/pthread/join错误消息";what():无效参数";,c++,pthreads,C++,Pthreads,它是一个更大应用程序的一部分,是一个简单的计时器线程,在尝试完成它之前可以正常工作: boost::asio::io_service io_service; shared_ptr<thread> loop; // it is not initialised here, just shows the idea boost::asio::deadline_timer timer(io_service, interval); void Timer::spin() { loop =
boost::asio::io_service io_service;
shared_ptr<thread> loop;
// it is not initialised here, just shows the idea
boost::asio::deadline_timer timer(io_service, interval);
void Timer::spin() {
loop = make_shared<thread>(&Timer::run, this);
}
void Timer::unspin() {
io_service.stop();
loop.get()->join();
}
void run() {
timer.async_wait(bind(&Timer::callbackWrapper, this, _1));
// restart
io_service.run();
}
<如果我“解密”它,意思是“当其他线程仍然在运行时主线程完成”(我不知道C++ LINGO)< /P>
如果依次调用unspin()
,则可能会显示以下零星错误消息:
terminate called after throwing an instance of 'std::system_error'
what(): Invalid argument
这很可能是由
thread.join()
引发的。问题是,我搜索了Stackexchange,但无法解释另一条消息。我意识到问题可能不在代码的小片段范围内(应用程序相当大,所以我不包括它)。但即使是这样,我也会询问第二条错误消息的含义及其可能的原因。引发std::system_error
(使用EINVAL
,如此处所示,或使用其他值)的可能原因有很多
你可以:
std::system\u error
的实例,或std::system\u error
或std::terminate
的任何内容几乎肯定与所述线程的不当处理有关。过一会儿你就会知道了
在这种情况下,您可以记住以下两种解释:
在没有活动异常的情况下终止调用
直接调用std::terminate
。同样,您可以在库文档中搜索这种说法,并找出与代码相关的可能原因
在抛出“std::system_error”实例后调用terminate
,但在捕获它的程序中没有
try
/catch
,因此异常系统调用了std::terminate
。同样,您可以研究您使用的特征可以抛出<代码> STD::SytSyrase,并且考虑在您的代码时添加一些异常安全性。 < P>可能发生的东西导致代码< > STD::StulyOrthRebug < /C> >(<代码> Envale<代码>,如这里或其他值)众多。
你可以:
std::system\u error
的实例,或std::system\u error
或std::terminate
的任何内容几乎肯定与所述线程的不当处理有关。过一会儿你就会知道了
在这种情况下,您可以记住以下两种解释:
在没有活动异常的情况下终止调用
直接调用std::terminate
。同样,您可以在库文档中搜索这种说法,并找出与代码相关的可能原因
在抛出“std::system_error”实例后调用terminate
,但在捕获它的程序中没有
try
/catch
,因此异常系统调用了std::terminate
。同样,您可以研究您使用的特征可以抛出<代码> STD::StulySyrase,并且还考虑在您的代码时添加一些异常安全性。 < P>此代码,在其当前形式中,不能合理地调试。这是因为它具有代码未检测到的接口规则(例如不连续两次调用spin
)。这使得代码很难测试、调试和维护
它甚至会使代码难以理解,因为这些需求可能没有在代码或文本中的任何地方记录下来。未来:
unpin
功能可以reset
shared\u ptr。spin
功能可以检查shared_ptr
是否已解锁spin
,并确保返回正确的错误或抛出正确的异常。这也可以作为代码来记录什么将和什么将不与类的接口一起工作terminate called after throwing an instance of 'std::system_error'
what(): Invalid argument