参考自 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. ZT:有些人,活了一辈子,其实不过是认真过了一天,其余时间都在重复这一天而已

    出处:http://news.163.com/17/1011/19/D0G7UEDS0001982T.html 有些人,活了一辈子,其实不过是认真过了一天,其余时间都在重复这一天而已,也有人每天不重样 ...

  2. 【CI】系列一:总体环境规划

    上周花了点时间把CI环境再次给搞起来了,但是觉得在实体机中总觉得不是很安心,安全性不足,另外没有做备份,安全性.扩展性等都不足,且不好迁移. 因为目前只给了我一台PC及,配置其实也不怎么样.但是却需要 ...

  3. Vue 状态管理 Vuex

    1.概述 Vuex作为插件,管理和维护整个项目的组件状态. 2.安装vuex cnpm i --save vuex 3.vuex使用 github地址:https://github.com/MengF ...

  4. js实现select跳转

    js简单实现select跳转功能:代码例如以下 <!DOCTYPE html> <html> <head> <title></title> ...

  5. Function.prototype.bind、call与apply方法简介

    前言 前段时间面试遇见一题,题目内容大概是 function Parent() { this.prop = 'parent'; } Parent.prototype.get = function() ...

  6. Docker的Jenkins Pipeline工作流

    原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模 ...

  7. Visual Studio提示“无法启动IIS Express Web服务器”或者“无法连接Web服务器IIS Express ”的解决方法

    解决办法:找到程序根目录,删除隐藏的.vs文件夹即可. 问题原因:一般是项目拷贝或者系统设置变更所造成的.

  8. caffe 中如何打乱训练数据

    第一: 可以选择在将数据转换成lmdb格式时进行打乱: 设置参数--shuffle=1:(表示打乱训练数据) 默认为0,表示忽略,不打乱. 打乱的目的有两个:防止出现过分有规律的数据,导致过拟合或者不 ...

  9. [ci]持续集成系列

    持续集成一直很蛋疼,感觉没底. 几个方面来写 1,搭建gitlab 配邮箱 域名等使之好用 2,搭建jenkins –yum,安装常见插件 3,搭建sonar,汉化 4,安装sonar-scanner ...

  10. Django学习之项目结构优化

    其实就是采用包结构,比如: 目录models,包含__init__.py,a.py,b.py 然后将model class写在a和b中,但是这样的话,导入时就要改变了! from models imp ...