我希望能够按如下方式中断线程。
void mainThread(char* cmd)
{
if (!strcmp(cmd, "start"))
boost::thread thrd(sender); //start thread
if (!strcmp(cmd, "stop"))
thrd.interrupt(); // doesn't work, because thrd is undefined here
}
thrd.interrupt()是不可能的,因为当我尝试中断它时, thrd 对象是未定义的。我怎样才能解决这个问题?
答案 0 :(得分:5)
void mainThread(char* cmd)
{
boost::thread thrd;
if (!strcmp(cmd, "start"))
thrd = boost::thread(sender); //start thread
if (!strcmp(cmd, "stop"))
thrd.interrupt();
}
答案 1 :(得分:1)
Boost线程是可移动的,因此您可以执行以下操作:
boost::thread myThread;
if ( isStart ) {
myThread = boost::thread(sender);
else if ( isStop ) {
myThread.interrupt();
}
如果你想传递它(例如作为函数的参数), 你可能想要使用指针或引用:
void
mainThread( std::string const& command, boost::thread& aThread )
{
if ( command == "start" ) {
aThread = boost::thread( sender );
} else if ( command == "stop" ) {
aThread.interrupt();
}
}
(这可能需要更多。例如,如果你执行的话,写完了
mainThread( "start" )
连续两次,你将分离第一个帖子,
并且永远无法再次参考它。)
另一种选择是使用boost :: shared_ptr。
答案 2 :(得分:0)
这不是关于boost :: thread的问题,而是关于范围:
这样:
if(Condition)
MyType foo;
... // foo is out of scope
foo.method(); // won't work, no foo in scope
与此相同:
if(Condition)
{
MyType foo;
} // after this brace, foo no longer exists, so...
foo.method(); // won't work, no foo in scope
请注意,上面的答案都是这样的:
MyType foo:
if (Condition)
foo.method(); // works because now there is a foo in scope
else
{
foo.otherMethod(); // foo in scope here, too.
}