gpt4 book ai didi

c++ - 将方法作为参数传递给另一个方法,该方法本身将传递的方法传递给标准线程

转载 作者:行者123 更新时间:2023-11-28 04:25:10 26 4
gpt4 key购买 nike

我有一个名为 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))。这样我就可以在我的主要执行方法中将 procedure1procedure2 传递给 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)
}
}

最佳答案

像这样

void exe_par(int a, int b, void (MyClass::*procedure)(int, int)) 
{
//...
threads.emplace_back(std::thread(procedure, this, a, b));
// first param is pointer to member function,
// second param is pointer to object on which member function is called
// the rest is arguments for member function

DEMO

关于c++ - 将方法作为参数传递给另一个方法,该方法本身将传递的方法传递给标准线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com