std :: thread在vc中的析构函数中获取中止异常
作者:互联网
当主要方法完成时,我在简单的VC程序中遇到异常终止异常.
这是我的示例测试程序.
#include "stdafx.h"
#include <thread>
#include <Windows.h>
class ThreadTest
{
public:
ThreadTest()
{
}
~ThreadTest()
{
}
void ThreadProc()
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ThreadTest test;
std::thread t = std::thread(&ThreadTest::ThreadProc, std::ref(test));
Sleep(5000);
return 0;
}
我有丰富pthread_create函数的经验,但是似乎缺少了一些东西.当我把睡眠(15000);在ThreadProc方法中,没有任何更改就会发生相同的问题.
解决方法:
这在std :: thread的destructor中进行了记录:如果线程在可连接时被破坏,则会调用std :: terminate.
引用C 11标准草案n3290(第30.3.1.3节线程析构函数):
If
joinable()
thenterminate()
, otherwise no effects. [ Note: Either implicitly detaching or joining a joinable() thread in its destructor could result in difficult to debug correctness (for detach) or performance (for join) bugs encountered only when an exception is raised. Thus the programmer must ensure that the destructor is never executed while the thread is still joinable. — end note ]
您必须加入线程或分离线程.在您的情况下,加入似乎是正确的选择.
标签:c,multithreading,visual-c 来源: https://codeday.me/bug/20191012/1900431.html