导致中止()的起始线程

Starting thread causing abort()

本文关键字:线程      更新时间:2023-10-16

我正在尝试使用常规 c++11 线程创建一个线程。我有一个名为NetworkManager的对象,它在其构造函数中创建其方法之一的线程,如下所示:

void NetworkManager()
{
    // Raknet setup here...
    std::thread networkUpdate(&NetworkManager::update, this);
    // Set timers
    playerDataTimer.start();
    playerDataTimer.pause();
    Logger::log("NetworkManager constructor ended");
}

更新方法通过 RakNet 库处理来自其他客户端的消息,如下所示:链接

我做了与示例中相同的事情,其中它被封装在一个永远持续的时间循环中。

当我尝试在构造函数中创建此线程时,我收到一条 abort() 消息(应用程序崩溃),我无法弄清楚为什么会这样。线程中使用的所有对象都是在循环开始之前设置的,所以我认为这不是问题所在。

您正在创建的std::thread对象在构造函数结束时被销毁,因为它是一个局部变量。如果在线程可联接时调用std::thread的析构函数(如示例中所示),则调用std::terminate

必须将该线程对象保留为类的成员,或将其存储在其他位置,或分离线程。(或者在构造函数中加入它,但这听起来不像是你想要的。

你的应用终止,因为std::thread在未.detach.join编辑的情况下被破坏。

~thread();
Destroys the thread object.
If *this has an associated thread (joinable() == true), std::terminate() is called.