对 pthread 做的一个简陋封装
参考自 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 做的一个简陋封装的更多相关文章
- 做为一个前端工程师,是往node方面转,还是往HTML5方面转
文章背景:问题本身来自于知乎,但是我感觉这个问题很典型,有必要把问题在整理一下,重新分享出来. 当看到这个问题之前,我也碰到过很多有同样疑惑的同学,他们都有一个共同的疑问该学php还是nodejs,包 ...
- React Native技术做的一个项目“微笑阅读”
最近用React Native做了一个APP应用,有点心得: React Native确实比Hybrid应用渲染快,响应快,用户体验更好: React Native比原生简单多了,会Js就可以了,开发 ...
- pthread库实现一个简单的任务池
pthread库实现一个简单的任务池 类关系图: 说明: 1:TaskManager类管理Task类,Task类是一个纯虚类; 2:ThreadManager类管理Th ...
- 最近做了一个短网址服务 di81.com
最近做了一个短网址服务: di81.com 项目中有一处需求,需要把长网址缩为短网址,把结果通过短信.微信等渠道推送给客户.刚开始直接使用网上现成的开放服务,然后在某个周末突然手痒想自己动手实现一 ...
- 我用开天平台做了一个字符串检查API,hin 简单~~
摘要:本文使用了工作台的API全生命周期管理和函数管理功能,编写字符串检查的函数,实现了API的快速创建和发布. 本文分享自华为云社区<[我用开天平台做了一个字符串检查API>,作者:人类 ...
- 做了一个sublime text插件
做了一个sublime text插件,可以方便地查看C++/python的调用图.插件的演示视频在这里: http://list.youku.com/albumlist/show?id=2820226 ...
- bootstrap做了一个表格
花了一下午做了一个表格: 大致是这样: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf ...
- PHP MVC简单介绍,对PHP当前主流的MVC做了一个总结
东抄西抄,对PHP当前主流的MVC做了一个总结PPT. 希望对初学者有点帮助! PHP MVC初步.ppt
- 用MVVM做了一个保存网页的工具-上篇
前言: 你是否有过收藏了别人博客或文章,当想用的时候却找不到?你是否有过收藏了别人博客或文章,却因为没有网络而打不开网页?OK,下面是我做的一个工具,有兴趣的同学们可以download 玩下,哈哈^. ...
随机推荐
- 开源知识库管理系统选型 centos6.4 搭建knowlededgeroot-1.0.4知识库平台
开源知识库管理系统选型,除了使用wiki外,还有下面可选: http://www.knowledgebase-script.com/ https://github.com/lordlamer/know ...
- 菜鸟调错(五)——jetty执行时无法保存文件
背景交代: 上一篇博客写的是用jetty和Maven做开发.測试.在使用的过程中遇到一个小问题.就是在jetty启动以后,改动了jsp.xml等文件无法保存. 错误信息: 解决方式: 到Maven库( ...
- Android基础新手教程——4.1.2 Activity初窥门径
Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...
- Mac电脑下配置maven环境变量
Mac电脑下配置maven环境变量 打开终端,使用 touch 命令创建 .bash_profile 文件 touch .bash_profile 编辑刚刚创建的文件 .bash_profile vi ...
- selenium 问题:Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms
问题:Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms 原因: selenium-server-standalone-x. ...
- hdu1010 dfs+路径剪枝
题意:用一个案例来解释 4 4 5 S.X. ..X. ..XD .... 在这个案例中,是一个4*4的地图. . 表示可走的地方, X 表示不可走的地方,S表示起始点,D表示目标点.没走到一个点之后 ...
- cadence原理图和PCB互联显示成功但是不能高亮和database
问题现象:cadence原理图和PCB互联显示成功但是不能高亮我的问题 解决:尝试修复数据库试试,Tools->Database check 提醒:有一个封装非法命名,在原理图中修改后 再次保存 ...
- Enum,int,string类型互转
举例:enum Colors { Red, Green, Blue, Yellow }; Enum-->String (1)利用Object.ToString()方法:如Colors.Green ...
- JQuery实现ajax跨域
AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请求数据,就会出现错误.如果能控制数据驻留的远程服务器 ...
- vue 父组件如何调用子组件的函数Methods
答案就是使用ref即可. <countdown ref="countdown"></countdown> beforeDestroy () { // 切换页 ...