博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象与基于对象 学习记录 thread举例
阅读量:5079 次
发布时间:2019-06-12

本文共 3273 字,大约阅读时间需要 10 分钟。

/********************************************************************/

* @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 
#include
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
(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 
#include
#include
class CThread{public: typedef boost::function
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
(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;}

  

 

转载于:https://www.cnblogs.com/itdef/p/4375529.html

你可能感兴趣的文章
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
团队项目开发客户端——登录子系统的设计
查看>>