面向对象与基于对象 学习记录 thread举例
/********************************************************************/
* @file
* @author def< qq group: 324164944 >
* @blog http://www.cnblogs.com/itdef/
* @brief
/********************************************************************/
/*******************************************************************************
* @file
* @author def< qq group: 324164944 >
* @blog http://www.cnblogs.com/itdef/
* @brief
/*******************************************************************************/ #include "stdafx.h"
#include <iostream>
#include <windows.h> using namespace std; class CThread{
public:
CThread();
virtual ~CThread();
bool Start();
void Join();
static DWORD WINAPI ThreadProc( LPVOID lpParameter);
virtual void Run() = 0;
private:
HANDLE hThread_;
DWORD dwThreadId_;
}; CThread::CThread():
hThread_(NULL),dwThreadId_(0)
{
cout << "Thread ..." << endl;
} CThread::~CThread()
{
if(hThread_ != NULL)
CloseHandle(hThread_);
cout << "~Thread ..." << endl;
} bool CThread::Start()
{
bool bRet = false;
hThread_ = CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc, // thread function
this, // argument to thread function
0, // use default creation flags
&dwThreadId_); // returns the thread identifier if(hThread_)
{
bRet = true;
}
return bRet;
} void CThread::Join()
{
WaitForSingleObject(hThread_,3000);
} DWORD CThread::ThreadProc( LPVOID lpParameter)
{
CThread* thread = static_cast<CThread*>(lpParameter);
thread->Run();
return NULL;
} class CMyThread:public CThread
{
public:
void Run(){ cout << "my thread..." << endl;}
}; int _tmain(int argc, _TCHAR* argv[])
{
CMyThread thread;
thread.Start();
thread.Join();
return 0;
}
基类是最基本的几个元素 线程ID 创建进程的函数start 运行指定的线程函数run 以及等待函数join()
使用的时候直接继承 在run函数中执行自己想执行的线程处理即可。
基于对象则未使用继承等特性,使用bind function这对利器 来实现回调
#include <windows.h>
#include <iostream>
#include <boost/function.hpp> class CThread
{
public:
typedef boost::function<void ()> ThreadFunc;
explicit CThread(const ThreadFunc& func);
~CThread(); void Start();
void Join();
private:
static DWORD WINAPI ThreadProc(LPVOID arg);
void Run();
ThreadFunc func_;
HANDLE hThread_; }; void CThread::Start()
{
hThread_ = CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc, // thread function
this, // argument to thread function
0, // use default creation flags
NULL); // returns the thread identifier
} CThread::CThread(const ThreadFunc& func):
hThread_(NULL),func_(func)
{
std::cout << "CThread()..." << std::endl;
} void CThread::Join()
{
WaitForSingleObject(hThread_,3000);
} CThread::~CThread()
{
if(hThread_)
CloseHandle(hThread_);
std::cout << "~CThread()..." << std::endl;
} void CThread::Run()
{
func_();
} DWORD CThread::ThreadProc(LPVOID arg)
{
CThread* thread = static_cast<CThread*>(arg);
thread->Run();
return NULL;
} //====================================== void ThreadFunc()
{
std::cout << "Enter thread function ...." << std::endl;
} int _tmain(int argc, _TCHAR* argv[])
{
CThread thread(ThreadFunc);
thread.Start();
thread.Join();
return 0;
}
面向对象与基于对象 学习记录 thread举例的更多相关文章
- Git 教程 -- 基于自己学习记录
Git 教程 -- 基于自己学习记录 1. 引言 由于学校布置了一项熟悉 git 和 svn 操作的实验,所以自己重新温习了下 git,记录过程在这. 2. 注册登录 GitHub. 3. 选择一个仓 ...
- JS是面向过程、面向对象还是基于对象?面向对象的代码体现
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...
- SVN教程 -- 基于自己学习记录
SVN教程 -- 基于自己学习记录 1. 概述 a. 什么是SVN? Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统.相较于 git ,svn 是集中式版本控 ...
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...
- 流畅的python第九章符合Python风格的对象学习记录
对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方式.Python提供了两种方式 repr()便于开发者理解的方式返回对象的字符串表示形式 str()便于用户理解的方式返回对 ...
- jsp内置对象学习记录
1.session,是一个会话保留在服务器端的对象(默认保留时间为30分钟),所以我们可以在session里面放用户信息以便后续的访问便利(缺点:cookie劫持,导致用户数据泄露).案例:(1)同个 ...
- C++11新特性,bind,基于对象
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
随机推荐
- django返回状态码的页面,指定p地址访问
只有DEBUG = False 才能展示自定义的错误页面,否则djnago会报错,给出提示信息. ps:django DEBUG=FALSE, 会导致不能加载静态文件 ALLOWED_HOSTS ...
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...
- DC组策略相关
恢复DC组策略默认配置 DcGPOFix [/ignoreschema] [/Target: Domain | DC | BOTH] dcgpofix /? gpupdate刷新 gpedit.msc ...
- ASCII字符串互换
//ASCII码转成字符: var a:String=String.fromCharCode(97); trace(a);//输出:a //字符转成ASCII码: var str:String = “ ...
- apiCloud事件发送与监听
apiCloud事件发送与监听 1.sendEvent 将任意一个自定义事件广播出去,该事件可在任意页面通过 addEventListener 监听收到. sendEvent({params}) 2. ...
- DELL服务器iDRAC相关设置
iDRAC又称为Integrated Dell Remote Access Controller,也就是集成戴尔远程控制卡 iDRAC卡相当于是附加在服务器上的一台小电脑,通过与服务器主板上的管理芯片 ...
- InitComponent的使用
网页中的数据,有些是不在网页上改变的,像一些个人信息,比如:头像,当前用户名,友情链接等等,每次请求该页面都要重新加载,这样很消耗服务器资源,会降低服务器的性能,这个时候我们可以把这些不变的信息,统一 ...
- 页面中 json 格式显示 数据
在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...
- exception keynote
[exception keynote] Note that the parentheses around this tuple are required, because except ValueEr ...
- HTML的属性和css基础
1.name属性: name属性,用于指定标签元素的名称,<a>标签内必须提供href或name属性:<a name ="value"> 2.id属性: 1 ...