【发布时间】:2016-03-30 03:24:57
【问题描述】:
我正在尝试添加一个带有线程的简单 for 循环,但仍然无法解决问题。我已经检查了很多原因,但我找不到任何解决方案。
我有一个简单的类,有两个方法A() 和B()。在另一个班级,我正在调用方法A()。看起来是这样的:
void MyClass::A()
{
std::vector<std::thread> threads;
for(int i=0;i<2;i++)
{
threads.push_back(std::thread(&MyClass::B, this));
}
for(auto &t : threads)
{
if(t.joinable())
t.join();
}
}
void MyClass::B()
{
}
但我仍然收到一些错误:
#0 ?? ?? () (??:??)
#1 00446D62 pthread_create_wrapper () (??:??)
#2 75327FB0 msvcrt!_cexit() (C:\Windows\SysWOW64\msvcrt.dll:??)
#3 040C8710 ?? () (??:??)
#4 753280F5 msvcrt!_beginthreadex() (C:\Windows\SysWOW64\msvcrt.dll:??)
#5 75B17C04 KERNEL32!BaseThreadInitThunk() (C:\Windows\SysWOW64\kernel32.dll:??)
#6 77ABAB8F ?? () (??:??)
#7 77ABAB5A ?? () (??:??)
#8 ?? ?? () (??:??)
有人知道出了什么问题吗?
只是再添加一件事。这个:
void MyClass::A()
{
std::thread t(&MyClass::B, this);
if(t.joinable())
t.join();
}
void MyClass::B()
{
}
没有任何问题。
【问题讨论】:
-
@davmac,OP 没有复制,OP 正在移动。
-
发布的代码是正确的。你确定这是真实的代码吗?请提供复制粘贴 MCVE。
-
FWIW 使用您的代码和一个简单的
main函数并适当地包含在 linux 上没有问题的工作。建议您按照 SergeyA 的建议发布完整的 MCVE。 -
很抱歉,如果它给人这样的印象。我的意思不是“使用我的”(无论如何它不是“我的”)或吸引任何个人关注。我知道手动线程管理是冗长且低效的,至少出于一个明显的原因,这里有一些库可以更有效地实现这类事情。 @SergeyA
标签: c++ multithreading