我有2个类,其中每个类的构造函数中都产生一个仅打印问候世界或再见宇宙的线程。我的目标是使程序同时打印出您好世界和再见宇宙。问题是程序当前在启动第二个线程之前等待第一个线程完成。它的基本线程1阻止了threa2的创建,直到完成为止。两个线程同时执行的正确方法是什么?
我的代码是
#include <iostream>
#include "voltage.h"
#include <thread>
class MyClass final
{
private:
std::thread mythread;
void _ThreadMain()
{
int x = 1000;
while(x>0)
{
std::cout << "hello world " << x << std::endl;
x--;
}
};
public:
MyClass()
: mythread{}
{
mythread = std::thread{&MyClass::_ThreadMain, this};
mythread.join();
}
};
class MyClass2 final
{
private:
std::thread mythread;
void _ThreadMain()
{
int x = 1000;
while(x>0)
{
std::cout << "goodbye universe " << x << std::endl;
x--;
}
};
public:
MyClass2()
: mythread{}
{
mythread = std::thread{&MyClass2::_ThreadMain, this};
mythread.join();
}
};
int main(int argc, char *argv[])
{
MyClass *myClass = new MyClass();
MyClass2 *myClass2 = new MyClass2();
return 0;
}
我的编译参数是
g++ -g -march=armv6 -marm -I Sources/ main.cpp -L libraries/ -lyocto-static -lm -lpthread -lusb-1.0
其中大部分用于我正在开发的程序的其他部分
答案 0 :(得分:4)
在构造函数中启动线程,并在类的析构函数中调用join
方法:
MyClass()
: mythread{} {
mythread = std::thread{&MyClass::_ThreadMain, this};
}
~MyClass() {
mythread.join();
}
MyClass2()
: mythread{} {
mythread = std::thread{&MyClass2::_ThreadMain, this};
}
~MyClass2() {
mythread.join();
}
但是您需要在主行中添加以下行
delete myClass; // wait until thread started in myClass ends
delete myClass2; // wait until thread started in muClass2 ends
强制调用析构函数。
答案 1 :(得分:0)
您为什么要加入线程?它使您等待线程完成。 了解更多here。
编辑:只需删除这些thread.join()行,即可正常运行。