zoukankan      html  css  js  c++  java
  • 面向对象与基于对象 学习记录 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;
    }
    

      

  • 相关阅读:
    剑指 Offer 06. 从尾到头打印链表
    剑指 Offer 05. 替换空格
    剑指 Offer 04. 二维数组中的查找
    剑指 Offer 03. 数组中重复的数字
    leetcode刷题笔记328题 奇偶链表
    leetcode刷题笔记324题 摆动排序 II
    leetcode刷题笔记321题 拼接最大数
    leetcode刷题笔记326题 3的幂
    20210301日报
    20210227日报
  • 原文地址:https://www.cnblogs.com/itdef/p/4375529.html
Copyright © 2011-2022 走看看