【发布时间】:2015-11-25 05:22:26
【问题描述】:
每当我使用线程执行以下代码时,程序都会出现此错误:
调试错误! 程序:... /path/to/.exe
abort() 已被调用
我想创建一个调用成员函数的线程。这是我正在使用的功能:
void ServerVote::createConnexionThreads()
{
for (int i = 0; i <= 50; ++i)
{
m_connexionThreads.push_back(&(std::thread(&ServerVote::acceptConnection,*this, i)));
}
for (int i = 0; i <= 50; ++i)
{
m_connexionThreads[i]->join();
}
}
如果需要,我可以提供额外的代码。使用调试器时,我发现程序在创建第一个线程后立即崩溃,在线程被 push_back 之后。然后调用 ~thread() 并在此函数内崩溃。这是向量声明:
std::vector<std::thread*> m_connexionThreads;
我使用的是 Visual Studio 2015。acceptConnection 函数内部有一个 while(true),计划稍后终止。
编辑:
感谢您的回答,但是当使用线程对象而不是指针时我无法编译。所以当我尝试推入这个向量时:
std::vector<std::thread> m_connexionThreads;
for (int i = 0; i <= 50; ++i)
{
m_connexionThreads.push_back((std::thread(&ServerVote::acceptConnection,*this, i)));
}
编译时出现此错误:
error C2280: 'std::thread::thread(const std::thread &)': attempting to reference a deleted function
【问题讨论】:
-
您正在尝试使用指向您在循环中创建的临时对象的指针填充容器。不太可能奏效。
标签: c++ multithreading visual-c++ visual-studio-2015 std