C++ 封装POSIX线程
来源:互联网 发布:手机练字软件 编辑:程序博客网 时间:2024/06/06 19:28
我们通常有这样的需求:需要在C++中用多线程处理可以并行处理的问题,且把线程函数封装在类中,而把线程函数封装在类中,导致了this指针作为默认的参数被传进了函数中,从而和线程函数参数不能匹配,不能通过编译。
一般有以下几种解决方案:
1. 将线程函数作为全局函数, 从而避免了this指针作为隐含参数的作怪行为,但这样线程函数却无法访问类中的私有变量,此为一大缺憾。
解决方案: 是把所有的私有变量变为全局变量,这样极大程度上破坏了类的封装性。
2. 引入友元函数,从而可以访问私有变量,但确需要创建一个该类的对象。
3. 将线程函数作为静态函数,因为在C++中静态函数没有this指针(即在内存中静态函数和普通全局函数几乎没有什么区别),故可以匹配编译通过, 但是当线程函数要访问私有变量呢?可以访问到吗?答案是不可以!
解决方案: 将this指针作为参数传递给静态函数,这样可以通过该this指针访问所有的私有变量。
下面是代码例子。
class Thread
{
public:
Thread():m_tid(0)
{
pthead_create(&m_tid,NULL, ThreadRun, this);
pthread_detach(m_tid);
}
static void* ThreadRun(void* parm)
{
Thread *pt = (Thread*)parm;
pt->run();
}
}
virtual void run()=0;
private:
pthread_t m_tid;
};
但是我要是还需要向静态函数中传递我自己需要的参数呢?
答案是:将this指针和需要的参数作为一个结构体一起传给静态函数。
struct Args { Thread *pthis; int var;};
- C++ 封装POSIX线程
- C++封装POSIX 线程库(三)线程的封装
- C++封装POSIX 线程库(一)互斥锁的封装
- C++封装POSIX 线程库(六)线程池
- C语言POSIX线程常用函数
- c/c++ POSIX线程和define指令
- 对posix线程机制的c++封装实现
- POSIX pthread线程库的封装-主动对象
- C++封装POSIX 线程库(五)实现CountDownLatch
- C++封装POSIX 线程库(四)使用封装的线程
- Posix 线程
- Posix线程
- POSIX线程
- POSIX 线程
- POSIX线程
- POSIX线程
- POSIX线程
- posix线程
- Java(Android)游戏开发框架LGame-0.2.7发布
- 设置让笔记本当无线路由
- 程序员的优势
- 正反向连接获得SHELL
- EIGRP的一些关键术语
- C++ 封装POSIX线程
- Cassandra节点管理
- 二分图最佳匹配 入门
- 第一次使用 哈哈哈
- 二分图最佳匹配 题目
- weiyanrelate
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 无聊
- 我是如何获得银行软件开发经验的?