c++11 thread如何放到类中,启动类成员函数

dbsave是一个类,执行的时候开启一个线程,运行周期性任务。

主要是用这个语句启动线程:

std::thread t(&DbSave::work, this);
t.detach();

示例代码:

dbsave.h

class DbSave
{
public:
	
	void start();
	void work();//线程函数

};

 

dbsave.cpp

#include "dbsave.h"

#include 
#include 


using namespace std;
void DbSave::start()//启动线程
{

	std::thread t(&DbSave::work, this);
	t.detach();
}



void DbSave::work()
{
	int i = 0;
	while (1)
	{
	    //doSomeThing();//改成自定义的任务函数
		cout << i++ << endl;
		this_thread::sleep_for(std::chrono::milliseconds(100));
	}
}

 

main.cpp中调用方法

#include 
#include 

int main()
{
    DbSave dbs;
	dbs.start();

	while (1)
	{
		this_thread::sleep_for(std::chrono::milliseconds(100));
	}
}

 


也可以使用:

thread t = thread(std::mem_fn(&MyClass::thread_func), Object, args..);    

t.detach();
如果thread_func为static,则不用写object, 否则要写,如主进程所调函数也为该类成员,则传入this指回自己。

如果thread_func后面有默认参数,不能省略默认参数。

 

 

参考:

https://blog.csdn.net/BJUT_bluecat/article/details/85201576

你可能感兴趣的:(c++,thread,c++11,类)