2014-01-09 22 views
1

我有这样的代码:错误而退出应用程序与其它线程中运行

int main(){ 
    thread loop2(loop2); 

    while(running){ 

    } 
} 

void loop2(){ 
    while(something){ 

    } 
} 

running转向false,程序应该退出。但我收到来自VS的错误:-abort() has been called.

我知道发生这种情况是因为第二个线程仍在运行。我试图用~thread()终止线程,但它没有工作。

+1

这段代码没有将'running'设置为false。事实上,你的程序展示了UB,因为你的线程不需要I/O或者自己终止。 –

+0

@LightnessRacesinOrbit设置*什么*为false?我没有看到有关'running'的声明。 – Casey

回答

1

更换

while(running){ 

} 

通过

loop2.join() 

它会等待,直到线程终止。

+0

他使用C++ 11线程,而不是pthreads。 – interjay

+0

谢谢,我只是编辑了我的答案 –

0

只要你喜欢它,你不会随意调用某个对象的析构函数!

相反,你应该中断然后加入的线程。