#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(); //向上转换 子类转换成父类
}