gpt4 book ai didi

c++ - 启动线程导致中止()

转载 作者:行者123 更新时间:2023-11-30 01:49:06 24 4
gpt4 key购买 nike

我正在尝试使用常规 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");
}

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

我做了与示例中相同的事情,将它封装在一个一直持续下去的 while 循环中。

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

最佳答案

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

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

关于c++ - 启动线程导致中止(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577002/

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