C++ 线程类封装

#ifndef _THREAD_H
#define _THREAD_H

/// @brief 线程
class Thread {
public:
    /// @brief 析构器
    virtual ~Thread (void) {}

    /// @brief 启动线程
    void start (void);

private:
    /// @brief 线程过程函数
    /// @return 线程返回值
    static void* run (
        void* arg ///< [in,out] 线程参数
    );

    virtual void* run (void) = 0;

    /// @brief 线程标识
    pthread_t m_tid;
};

#endif // _THREAD_H
 

 

#include "Thread.h"

// 启动线程
void Thread::start (void) {
    // 线程属性结构
    pthread_attr_t attr;
    // 初始化线程属性结构
    pthread_attr_init (&attr);
    // 设置线程栈空间大小:1M字节
    pthread_attr_setstacksize (&attr, 1024 * 1024);
    // 设置线程分离状态:创建即分离
    pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);

    // 创建线程。线程标识存入成员变量m_tid,线程属性取自先前设
    // 置好的线程属性结构attr,线程过程函数为静态成员函数run,
    // 传递给线程过程函数的参数为指向线程(子类)对象的this指针
    int error = pthread_create (&m_tid, &attr, run, this);
    // 若失败
    if (error)
        // 记录一般错误日志
        g_app->m_log.printf (Log::LEVEL_ERR, __FILE__, __LINE__,
            "pthread_create: %s", strerror (error));

    // 销毁线程属性结构
    pthread_attr_destroy (&attr);
}

void* Thread::run(void* arg)
{
    
    return static_cast<Thread *> (arg)->run();  //向上转换 子类转换成父类

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值