c++多线程,thread的参数如果是使用类的成员函数时的参数

前言

如果使用#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值