gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:56:51 29 4
gpt4 key购买 nike

当 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 函数的经验,但似乎缺少某些东西。当我 sleep 时(15000);在 ThreadProc 方法中发生同样的问题,但没有任何更改。

最佳答案

这记录在 std::threaddestructor 中: 如果线程在可连接时被销毁,则调用 std::terminate

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

If joinable() then terminate(), 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++ - std::thread 在 vc++ 的析构函数中获取中止异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826806/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com