Linux下C編程2--線程的練習

先挖坑,週末再補==ios

對於多線程的demo,主要在嘗試封裝 thread類來簡化建立多線程的步驟:多線程

主要參考文章:跳轉1函數

線程基類  BaseThread:主要提供接口this

本身的功能線程類  MyThread: 主要去實現你的線程中但願執行的操做.net

#ifndef CTHREAD_HH
#define CTHREAD_HH

#include <stdio.h>
#include <iostream>
#include <pthread.h>
class BaseThread
{
public:
	
	BaseThread();
	virtual ~BaseThread();

	//開始建立線程並執行
	bool start();

	//阻塞直到等待線程退出
	bool wait();	

	//線程入口函數,用靜態全局
	static void* ThreadEntranc(void* args);
	
	//線程的真正要執行任務放在這裏。ThreadEntranc中調用這個函數
	virtual void Run()=0;
	

private:
	
	pthread_t m_threadID;

};


class MyThread:public BaseThread
{
public:

	//繼承以後只須要重寫這個線程內部執行動做函數	
	virtual void Run();
	
};


#endif

  

來看對應的實現線程

#include "CThread.h"

BaseThread::BaseThread()
{

}

BaseThread::~BaseThread()
{
	printf("~BaseThread()\n");
}

bool BaseThread::start()
{
	int iRet = -1;
	iRet = pthread_create(&m_threadID, NULL, ThreadEntranc, this);
	if(0 != iRet)
	{
		printf("pthread_create error,iRet: %d\n",iRet);
		return false;
	}
	return true;		
}

bool BaseThread::wait()
{
	int iRet = -1;
	iRet = 	pthread_join(m_threadID,NULL);
	if(0 != iRet)
	{
		printf("pthread_join error,iRet: %d\n",iRet);
		return false;
	}
	printf("pthread_join over\n");
	return true;	
}

void* BaseThread::ThreadEntranc(void* args)
{
	BaseThread* p = NULL;
	p = static_cast<BaseThread*>(args);
	if(NULL != p)
	{
		p->Run();
	}
	else
	{
		printf("獲取線程實例指針失敗\n");
	}
	return NULL;
}



void MyThread::Run()
{
	for(int i=0; i<5; i++)
	{
		printf("--- this mythred--\n");
	}
	return ;
}

  

主程序中的調用指針

#include "CThread.h"

int main()
{
	MyThread test;
	test.start();
	test.wait();
	return 0;
}
相關文章
相關標籤/搜索