前言
如果使用#include<thread>
之后,使用thread
输入函数名作为参数,去构建线程,网上有很多例子。这里主要记录一下如果传进去的是类成员方法时,如何设置参数。
代码
Class1.h
#pragma once
#include<ctime>
#include<stdlib.h>
// 要声明为static,否则会报link2005,重复定义的错误
static int getRandIntNumber(int max_num_)
{
srand((int)std::time(0));
return rand() % max_num_;
}
class Class1
{
public:
void class1Function(long long& time_stamp_, int& n_);
};
Class1.cpp
#include "Class1.h"
#include<chrono>
void Class1::class1Function(long long& time_stamp_, int& n_)
{
// 毫秒
std::chrono::milliseconds ms =
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
time_stamp_ = ms.count();
n_ = getRandIntNumber(100);
}
main.cpp
#include<iostream>
#include<thread>
#include"Class1.h"
using namespace std;
int main()
{
Class1 class1Obj;
long long stamp_1 = -1;
int n1 = -1;
// 类成员方法传参,分别为
// 类成员函数的地址,对象地址,成员方法参数1,成员方法参数2...
thread thread1(&Class1::class1Function, &class1Obj, std::ref(stamp_1), std::ref(n1));
thread1.join();
// 将结果交给主线程
std::cout << "int main funciton: \n";
std::cout << "stamp_1 = " << stamp_1 << ", n1 = " << n1 << std::endl;
return 0;
}