POCO C++解析之一 一般线程

本文探讨了POCO C++库中的线程接口类Thread,该类在Foundation模块下,通过ThreadImpl进行平台适配,提供跨平台的线程操作和命名功能。
摘要由CSDN通过智能技术生成

这一部分主要包括了Thread、ThreadImpl类,封装了线程操作并提供了命名线程功能。
一、基本概况

隶属模块: Foundation
Thread是线程接口类,其主要功能是由ThreadImpl来实现的。根据不同的平台,实现相应平台的线程操作。

class Thread : private ThreadImpl
{
    // …
};
因为Thread的主要功能实现来自于ThreadImpl,因此Thread内部的功能函数大部分都是类似于下面的风格:
void Thread::start(Runnable& target)
{
    startImpl(target);
}

即将Thread类成员的调用传递给ThreadImpl类相应功能的成员。这样的好处是在其接口不变的情况下实现可以随意变化。这里的变化主要来自于不同的平台。
这个封装最核心的部分应该是start()函数了,此函数用来启动一个线程。Thread类使用重载的方法定义了两个start()函数。
void startImpl(Runnable& target);
void startImpl(Callable target, void* pData = 0);
void Thread::start(Runnable& target)
{
    startImpl(target);
}

二、 Thread和ThreadImpl类的数据成员
Thread
    // 线程ID,不是pthread_t类型,只是作为Thread线程唯一标识。
    int   _id;  
    // 线程名称。
    std::string    _name;
    // 此对象为每个线程管理一些数据
    ThreadLocalStorage* _pTLS;
    // 实现线程互斥锁
    mutable FastMutex   _mutex;
ThreadImpl
    // 用来存储线程数据 
    AutoPtr<ThreadData> _pData;
    // 静态变量,用来存储当前线程对象。
    static CurrentThreadHolder _currentThreadHolder;
为了了解上面出现的相关类变量类型的实现,这里也将代码贴上看着方便:
下面两个类是作为ThreadImpl的内部类定义的。
class CurrentThreadHolder
{
public:
    CurrentThreadHolder()
    {
    if (pthread_key_create(&_key, NULL))
          throw SystemException("cannot alloc
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值