我正在努力理解c++中的多线程。我试图调用一个函数在另一个类使用两个线程如下所示。此函数还返回数据。
vmgr.h
class VMGR{
public:
int helloFunction(int x);
};
vmgr.cpp
#include"vmgr.h"
#include<iostream>
int VMGR::helloFunction(int x){
std::cout<< "Hello World="<< x << std::endl;
return x;
}
main.cpp
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include "vadd.h"
#include<iostream>
#include<thread>
#include<chrono>
#include<algorithm>
#include "vmgr.h"
using namespace std::chrono;
int main(int argc, char* argv[]) {
VMGR vm;
std::thread t1(&VMGR::helloFunction, vm, 20);
std::thread t2(&VMGR::helloFunction, vm, 30);
t1.join();
t2.join();
return 0;
}
我从线程返回值的语法不正确。请帮助我如何处理返回值。提前谢谢你。
从线程中获取结果最简单的方法是使用多个指针。
我的简单解决方案如下:
#include<iostream>
#include<thread>
using namespace std::chrono;
class VMGR {
public:
void helloFunction(int x, int *res);
};
void VMGR::helloFunction(int x, int *res) {
std::cout << "Hello World=" << x << std::endl;
*res = x;
}
int main(int argc, char* argv[]) {
VMGR vm;
int outputs[2];
std::thread t1(&VMGR::helloFunction, vm, 20, &outputs[0]);
std::thread t2(&VMGR::helloFunction, vm, 30, &outputs[1]);
t1.join();
t2.join();
for (auto n : outputs)
std::cout << n << std::endl;
}
但是,上面是too简单的代码。如果你的hellofunction ()"有副作用,必须添加同步代码。