Enn*_*eon 1 c++ multithreading c++11
我有以下三个文件:
MyClass.h
class MyClass {
private:
std::thread* thread = NULL;
void run();
public:
~MyClass();
void start();
}
Run Code Online (Sandbox Code Playgroud)
MyClass.cpp
MyClass:~MyClass() {
if (thread != NULL)
thread -> join();
}
void MyClass::run() {
//do stuff
}
void MyClass::start() {
thread = &std::thread (&MyClass::run, this);
}
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
int main() {
MyClass obj{};
obj.start();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我总是得到R6010 - abort() has been called,我不知道为什么abort()被调用.当我在main函数中创建线程时,它可以工作,但出于设计原因,我想启动它MyClass.这有一种方法可以启动线程MyClass吗?
PS: 这个问题很相似,但答案并没有解决我的问题.
W.B*_*.B. 10
这是因为在编辑或编辑std::thread之前,句柄被销毁(超出范围).joindetach
我建议:
class MyClass {
private:
std::thread thread;
void run();
public:
~MyClass();
void start();
}
Run Code Online (Sandbox Code Playgroud)
和:
MyClass:~MyClass() {
if (thread.joinable())
thread.join();
}
void MyClass::run() {
//do stuff
}
void MyClass::start() {
thread = std::thread (&MyClass::run, this); //Move assignment
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2863 次 |
| 最近记录: |