类定义
- void threadFn(int max);方法是DefineClass类中定义的私有的方法,可以作为thread的线程处理函数;
- void startThread(int index);方法用来给外部调用,在类中启动线程;
class DefineClass {public: DefineClass(); ~DefineClass() = default; void startThread(int index);private: void threadFn(int max);};
类实现
- startThread函数中,起一个局部的std::thread,并调用detach方法;其中std::thread传入有std::bind生成的对象;
- std::bind带有3个参数:第一个参数标识类成员函数;第二个参数this代表类成员,thread可以通过this找到类成员函数地址;第三个参数表示传入成员函数的参数;
- 最后在成员函数中实现内容,其保证是在另一个线程执行的;
#include "DefineClass.h"#include #include #include DefineClass::DefineClass() { }void DefineClass::startThread(int index) { std::thread innerThread = std::thread(std::bind(&DefineClass::threadFn, this, index)); innerThread.detach();}void DefineClass::threadFn(int max) { int index = max; while(index > 0) { printf("Thread index %d", index--); }}
调用
- 外部通过类对象defineClass调用startThread函数,执行示例;
#include #include #include #include #include "DefineClass.h"static volatile bool exitApp = false;static void sigHandle(int sig) { if (sig == SIGINT || sig == SIGTERM) { printf("received signal %d, exit application.", sig); exitApp = true; }}int main(int argc, char **argv) { printf("Test Demo Start"); signal(SIGINT, sigHandle); signal(SIGTERM, sigHandle); auto defineClass = DefineClass(); defineClass.startThread(5); while(!exitApp) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } printf("Test Demo Start"); return 0;}
打印如下
Linux上编译执行结果