利用BOOST, 成员函数做线程
来源:互联网 发布:java缓存技术 面试 编辑:程序博客网 时间:2024/06/05 08:44
项目中为满足一对多的socket连接,启动任意个监听(配置文件控制),需要使得监听线程动态可配.
通常线程是全局的,静态的,不能满足要求,因此需求是使得线程函数为类的非静态成员函数,类本身可以根据配置生成N个实例.
在这里我利用BOOST的线程系列函数来完成这种操作,具体如下:
1,声明一个线程池, 例如: boost::thread_group m_Threads;
2.装载并启动若干个线程: m_Threads.create_thread(boost::bind(&XXClass::XXXThread, this))
create_thread 这个函数没什么可说,和AfxBeginThread差不多,用来启动线程.
XXXThread是XXClass的成员函数, 本质上成员函数等用于普通函数,只不过相比于普通函数,隐含传递了this指针.
在这里使用&XXClass::XXXThread来获得该函数内存地址,然后通过boost::bind将该函数,和当前实例的this指针进行绑定.
这样操作后,实际执行的线程和成员函数没什么区别,类实例内部的资源都可以使用.
这样的话,不同实例执行相同的操作,启动的线程跟随各个实例,实现了多样性.
另外, boost::bind是个骚操作,具体了解可以搜索引擎.
随手写个测试:
// testBoost.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <boost/thread/thread.hpp> #include <boost/bind.hpp>class CTestThread{public:CTestThread(int nNum):m_nThreadNum(nNum){}~CTestThread(){}void TestThread(){printf("Thread ID %ld -- Thread Num: %d \r\n", GetCurrentThreadId(), m_nThreadNum);}void BeginThread(){threadGroups.create_thread(boost::bind(&CTestThread::TestThread, this));}private:int m_nThreadNum;boost::thread_group threadGroups;};int _tmain(int argc, _TCHAR* argv[]){CTestThread t1(11);CTestThread t2(22);CTestThread t3(33);CTestThread t4(44);t1.BeginThread();t2.BeginThread();t3.BeginThread();t4.BeginThread();system("pause");return 0;}
阅读全文
0 0
- 利用BOOST, 成员函数做线程
- boost线程之类成员函数
- boost thread 使用类的非静态成员函数做线程函数之【原理】
- Boost线程运行类成员函数
- 类的非静态成员函数做boost::thread参数
- Boost.Regex 成员函数
- 一段 C++ 代码(成员函数做线程函数)
- 类的成员函数做线程的创建
- 如何实现利用类成员函数创建线程
- 如何实现利用类成员函数创建线程
- boost::bind 绑定成员函数
- 成员函数线程适配器
- 线程调用成员函数
- boost bind 全局函数(非成员函数)
- 成员函数做为线程函数
- 成员函数做为线程函数
- 成员函数做为线程函数
- 成员函数做为线程函数
- 二叉树的各种操作
- C指针的理解
- 区块链(Blockchain)-核心技术概览
- ES6接口
- 关于HTTP协议,一篇就够了
- 利用BOOST, 成员函数做线程
- Guarded Suspension Pattern
- 吾日常操作Linux中学到的指令(动态更新)
- 自制OculusVR控制(一)——利用Unity的自带方法实现VR的控制输入
- caffe中的batchNorm层(caffe 中为什么bn层要和scale层一起使用)
- Android仿微信源码下载
- 树剖学习笔记(二)—— 原理
- 素数对
- Spring 的监听ApplicationListener 和 ApplicationEvent