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 once
class ThreadTest
{
public:
void task1();
void task2();
};