我有一个名为MyClass
的类,其中包含两个相似但略有不同的用于计算内容的非静态方法。每种方法的计算可以并行进行。我们称它们为void procedure1(int a, int b)
和void procedure2(int a, int b)
。这两种方法都可以并行通过std::thread
来执行,并且两者取相同的参数。在我的主执行,procedure1()
被称为第一,完成(螺纹连接),后来procedure2()
被调用。我想使用第三个方法来标准化调用这两个方法之一的并行执行,将其称为void exe_par(int a, int b, void (MyClass::*procedure)(int , int))
。这样我可以只是传递procedure1
或procedure2
到exe_par
我的主要执行方法中,参见下面的例子。
为清楚起见,我知道一般如何将类的方法传递给类的另一方法作为参数,以及如何将类的方法传递给std::thread
。我在传递一个方法特别感兴趣std::thread
已经为作为参数传递给方法初始化所有我的线程通过。
Class MyClass {
void procedure1(int a, int b) { // does something // }
void procedure2(int a, int b) { // does something // }
void exe_par(int a, int b, void (MyClass::*procedure)(int, int)) {
std::vector<std::thread> threads;
for(int thread = 0; thread < 4; ++thread) {
threads.emplace_back(std::thread( // pass procedure somehow here //, a, b)
}
for(auto iter = threads.begin(); iter != threads.end(); ++iter){
iter->join();
}
}
void main_exe() {
int a = 2 // I know this is stupid, for sake of simplicity
int b = 2 // I know this is stupid, for sake of simplicity
exe_par(a, b, &MyClass::procedure1)
// some other sequential code here
exe_par(a, b, &MyClass::procedure2)
}
}