我正在尝试使用常规 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 库处理来自其他客户端的消息,如下所示:Link
我做了与示例中相同的操作,将其封装在一个永远持续下去的 while 循环中。
当我尝试在构造函数中创建此线程时,我收到 abort() 消息(应用程序崩溃),但我无法弄清楚这是为什么。线程中使用的所有对象都是在循环开始之前设置的,因此我认为这不是问题。
最佳答案
您正在创建的 std::thread
对象会在构造函数末尾被销毁,因为它是一个局部变量。如果destructor当线程可连接时调用 std::thread
的(就像在您的示例中一样),调用 std::terminate
。
您必须将该线程对象保留为类的成员,或者将其存储在其他位置,或者分离线程。 (或者在你的构造函数中加入它,但这听起来不像你想要的那样。)
关于c++ - 启动线程导致 abort(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577002/