当main方法完成时,我在简单的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;
}
我有nativate pthread_create函数的经验,但似乎缺少某些东西。当我把睡眠(15000);在ThreadProc方法中,同样的问题没有任何变化。
答案 0 :(得分:7)
std::thread
的{{3}}中记录了这一点:如果某个线程在可加入时被销毁,则会调用std::terminate
。
来自C ++ 11标准草案n3290(§30.3.1.3线程析构函数)的引用:
如果
joinable()
然后terminate()
,则无效。 [注意:在析构函数中隐式分离或连接joinable()线程可能导致难以调试正确性(用于分离)或性能(用于连接)仅在引发异常时遇到错误。因此,程序员必须确保在线程仍可连接时永远不会执行析构函数。 - 结束说明]
您必须加入线程或分离它。在您的案例中,加入似乎是正确的选择。