参考自 pthreadcc 库的 ThreadBase 类

用法:继承该类,重写 execute 方法,调用父类的 launchThread 方法启动线程

Thread.h

//
// Thread.h
// MinaCppClient
//
// Created by yang3wei on 7/23/13.
// Copyright (c) 2013 yang3wei. All rights reserved.
// #ifndef __MinaCppClient__Thread__
#define __MinaCppClient__Thread__ #include <netdb.h> class Thread {
public:
Thread();
~Thread(); void launchThread(); protected:
virtual void* initialise();
virtual void* execute();
virtual void cleanUp(); private:
pthread_t m_oThread;
static void* threadMain(void* in_pArg);
}; #endif /* defined(__MinaCppClient__Thread__) */

Thread.cpp

//
// Thread.cpp
// MinaCppClient
//
// Created by yang3wei on 7/23/13.
// Copyright (c) 2013 yang3wei. All rights reserved.
// #include "Thread.h"
#include <pthread.h>
#include <stdio.h> Thread::Thread() {
// printf("Thread::Thread()\n");
} Thread::~Thread() {
// printf("Thread::~Thread()\n");
} void* Thread::initialise() {
// printf("Thread::initialise()\n");
return NULL;
} void* Thread::execute() {
// printf("Thread::execute()\n");
return NULL;
} void Thread::cleanUp() {
// printf("Thread::cleanUp()\n");
} void Thread::launchThread() {
// printf("Thread::launchThread()\n");
do {
pthread_attr_t tmp_oThreadAttr;
if (pthread_attr_init(&tmp_oThreadAttr) != 0) {
printf("launchThread()->pthread_attr_init() error!\n");
break;
}
if (pthread_attr_setdetachstate(&tmp_oThreadAttr, PTHREAD_CREATE_DETACHED) != 0) {
printf("launchThread()->pthread_attr_setdetachstate() error!\n");
pthread_attr_destroy(&tmp_oThreadAttr);
break;
}
if (pthread_create(&m_oThread, &tmp_oThreadAttr, &(Thread::threadMain), this) != 0) {
printf("launchThread()->pthread_create() error!\n");
break;
}
printf("Launch receive thread successfully!\n");
} while (0);
} void* Thread::threadMain(void* in_pThread) {
// printf("Thread::threadMain()\n");
Thread* t_pThread = (Thread*)in_pThread;
void* t_pRetVal; if ((t_pRetVal = t_pThread->initialise()) == NULL) {
t_pRetVal = t_pThread->execute();
} t_pThread->cleanUp(); return t_pRetVal;
}

对 pthread 做的一个简陋封装的更多相关文章

  1. 做为一个前端工程师,是往node方面转,还是往HTML5方面转

    文章背景:问题本身来自于知乎,但是我感觉这个问题很典型,有必要把问题在整理一下,重新分享出来. 当看到这个问题之前,我也碰到过很多有同样疑惑的同学,他们都有一个共同的疑问该学php还是nodejs,包 ...

  2. React Native技术做的一个项目“微笑阅读”

    最近用React Native做了一个APP应用,有点心得: React Native确实比Hybrid应用渲染快,响应快,用户体验更好: React Native比原生简单多了,会Js就可以了,开发 ...

  3. pthread库实现一个简单的任务池

    pthread库实现一个简单的任务池 类关系图: 说明:         1:TaskManager类管理Task类,Task类是一个纯虚类;         2:ThreadManager类管理Th ...

  4. 最近做了一个短网址服务 di81.com

    最近做了一个短网址服务:   di81.com 项目中有一处需求,需要把长网址缩为短网址,把结果通过短信.微信等渠道推送给客户.刚开始直接使用网上现成的开放服务,然后在某个周末突然手痒想自己动手实现一 ...

  5. 我用开天平台做了一个字符串检查API,hin 简单~~

    摘要:本文使用了工作台的API全生命周期管理和函数管理功能,编写字符串检查的函数,实现了API的快速创建和发布. 本文分享自华为云社区<[我用开天平台做了一个字符串检查API>,作者:人类 ...

  6. 做了一个sublime text插件

    做了一个sublime text插件,可以方便地查看C++/python的调用图.插件的演示视频在这里: http://list.youku.com/albumlist/show?id=2820226 ...

  7. bootstrap做了一个表格

    花了一下午做了一个表格: 大致是这样: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf ...

  8. PHP MVC简单介绍,对PHP当前主流的MVC做了一个总结

    东抄西抄,对PHP当前主流的MVC做了一个总结PPT. 希望对初学者有点帮助! PHP MVC初步.ppt

  9. 用MVVM做了一个保存网页的工具-上篇

    前言: 你是否有过收藏了别人博客或文章,当想用的时候却找不到?你是否有过收藏了别人博客或文章,却因为没有网络而打不开网页?OK,下面是我做的一个工具,有兴趣的同学们可以download 玩下,哈哈^. ...

随机推荐

  1. 关于public、private、protected、internal

    1.private修饰符 private修饰符用于设置类或类成员的訪问权限仅为所属类的内部, private也被称为私有修饰符.某些时候须要訪问私有类成员时,可通过get和set訪问器读取或改动. 2 ...

  2. 【DP】UVA 624 CD 记录路径

    开一个数组p 若dp[i-1][j]<dp[i-1][j-a[i]]+a[i]时就记录下p[j]=a[i];表示此时放进一个轨道 递归输出p #include <stdio.h> # ...

  3. float过后 高度无法自适应的解决方法

    float过后 高度无法自适应的解决方法: 在float层最外面包一层div即可.

  4. lombok使用总结

    前提 这篇文章主要介绍lombok的使用,至于lombok的源码和原理暂不探究,可以看上一篇文章插件化注解处理API去了解lombok的基本原理.参考资料: lombok官网 lombok官方教程-l ...

  5. GIT基本概念和用法总结【转】

    在日常使用GIT过程中,经常会出错,比如无意间丢失了未提交的数据,回退版本时丢失了工作目录,等等.经过思考发现,所有这些错误都是因为对GIT中一些基本的概念模糊而导致,因为对一些基本概念不清晰,导致对 ...

  6. 【MyBatis学习07】动态sql

    1. 动态sql 动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装.就拿上一篇博文中对用户的综合查询一例来 ...

  7. php中在局部作用域内访问全局变量

    php中,由于作用域的限制,导致变量的访问限制: 1.局部作用域内不能访问全局变量 2.全局作用域内不能访问局部变量 对于第一种情况,如下代码将不能正常运行: <?php //局部作用域(函数内 ...

  8. C# NPOI操作Excel(上)

    NPOI 官网下载DLL:http://npoi.codeplex.com/releases 1.读取Excel转为DataTable /// <summary> /// 读取excel转 ...

  9. TFTP 与 FTP的区别

    FTP(File Transfer Protocol,文件传输协议)协议在TCP/IP协议族中属于应用层协议,用于在远端服务器和本地客户端之间传输文件,使用TCP端口20和21进行传输.端口20用于传 ...

  10. Atitit.输入法配置说明v1 q229

    Atitit.输入法配置说明v1 q229 //------------------------------------------------------ //   IME设置 //-------- ...