通过一个方法作为参数,以另一种方法,它本身通过所传递的方法的std螺纹

时间:2019-02-02 16:18:15

标签: c++ multithreading

我有一个名为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))。这样我可以只是传递procedure1procedure2exe_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)
        }
}

1 个答案:

答案 0 :(得分:1)

类似这样的东西

'server'

DEMO