std :: thread在vc ++中的析构函数中获取中止异常

Raj*_*tel 2 c++ multithreading visual-c++

当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;
}
Run Code Online (Sandbox Code Playgroud)

我有nativate pthread_create函数的经验,但似乎缺少某些东西.当我把睡眠(15000); 在ThreadProc方法中,同样的问题没有任何变化.

Mat*_*Mat 7

这是记录在std::thread析构函数:如果一个线程被摧毁,它是可连接的,std::terminate被调用.

引自C++ 11标准草案n3290(§30.3.1.3 线程析构函数):

如果joinable()那时terminate(),否则没有效果.[注意:在析构函数中隐式分离或连接joinable()线程可能导致难以调试正确性(用于分离)或性能(用于连接)仅在引发异常时遇到错误.因此,程序员必须确保在线程仍可连接时永远不会执行析构函数. - 结束说明]

您必须加入线程或分离它.在您的情况下,加入似乎是正确的选择.