C++成员函数如何调用线程

来源:互联网 发布:淘宝上回收黄金靠谱吗 编辑:程序博客网 时间:2024/06/05 09:58

C++成员函数如何调用线程

假设在成员函数为 task1,在task1中想要采用线程方式调用成员函数task2,从而提升程序运行速度,可以采用如下方式:

void ThreadTest:: task1() {    thread t(&ThreadTest::task2, this, 1); //调用task2,注意这里调用的方式,task2是ThreadTest类的另一个成员函数,最后一个参数1为放入task2中的参数    int N = 100;    for (int i = 0; i < N; i++)    {        for (int j = 0; j < N; j++)            sum1 += (i + j);        cout << "task1: " << i << endl;    }    t.join();  //等待线程结束}

完整代码:

main函数

#include "stdafx.h"#include <iostream>#include <thread>#include "ThreadTest.h"using namespace std;int main(){    ThreadTest t1;    t1.task1();    cout << "test" << endl;    cout << "threads: "<<thread::hardware_concurrency() << endl;    system("pause");    return 0;}

ThreadTest类 cpp

// ThreadTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <thread>#include "ThreadTest.h"using namespace std;int N = 100;int sum1 = 0, sum2 = 0;void ThreadTest:: task1()  //用于比较的函数{    thread t(&ThreadTest::task2, this);    int N = 100;    for (int i = 0; i < N; i++)    {        for (int j = 0; j < N; j++)            sum1 += (i + j);        cout << "task1: " << i << endl;    }    t.join();}void ThreadTest::task2()  //用于比较的函数{    for (int i = 0; i < N; i++)    {        for (int j = 0; j < N; j++)            sum2 += (i + j);        cout << "task2: " << i << endl;    }    cout << "sum2: " << sum2 << endl;}

ThreadTest.h

#pragma onceclass ThreadTest{public:    void task1();        void task2();};
0 0