先挖坑,週末再補==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; }