日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

线程类C++多线程框架(一)--------- new一下就启动一个线程

發(fā)布時間:2023/12/13 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程类C++多线程框架(一)--------- new一下就启动一个线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前筆者幾篇文章介紹了改線程類的文章. 關聯(lián)文章的地址

????

幾年前寫過一個C++的多線程框架,雖然寫完了,但是人一懶做了一次說明以后就沒影了,最近把代碼整頓了一下,預備發(fā)到github上,在這里,再把這個框架總結一下吧。

????

????

多線程始終是編程中常見的問題,特別是在Linux的c++上,多線程的封裝始終不是很好,當然,有很多第三方庫可以用,比如boost之類的,但是我們有時候并不須要那么龐大的庫,只須要一個輕量級的線程框架就好了,于是自己編了一個,現(xiàn)在只在Linux下用了,但是設計的時候是按照多平臺來編的,如果你有須要,可以自己添加一些個類,把他釀成一個windows平臺獲得其他平臺的,比如eCos,Vxworks等等。。

????

????

對于多線程,我們須要的是把操作系統(tǒng)底層封裝起來,讓用戶編寫程序的時候更多的存眷他的代碼邏輯而不是線程之間的邏輯,最好是new一個類以后,就啟動了一個線程,線程之間的通信也有相應的類封裝起來,只要調用就好了。

????

????

根據(jù)這些,我們定義了一組基類,來封裝各種多線程的接口

????

????

操作系統(tǒng)基類,該類主要定義了createThread函數(shù)來創(chuàng)立線程,該函數(shù)是純虛函數(shù),繼承自它的類須要根據(jù)平臺實現(xiàn)其功能 class COperatingSystem {public:COperatingSystem();~COperatingSystem();virtual bool createThread(CThread *mThread,unsigned long stack_size=8*1024)=0;virtual void sleepSec(unsigned long sec)=0;protected:CThread *p_thread; };
線程基類,定義了threadEntry來作為線程的入口,initializeThread來初始化線程,子類可以初始化不同的成員變量,mainLoop是純虛函數(shù),為線程的主函數(shù),一般是一個while循環(huán),子類必須實現(xiàn)該虛函數(shù)。 class CThread {public:CThread(const char *m_thread_name);~CThread();void threadEntry(CCountingSem *pSemaphore);protected:virtual bool initializeThread();virtual void mainLoop()=0;COperatingSystem *p_opration_system;char *p_thread_name;};
為了平臺的無關性,使用了簡略工廠模式,用來根據(jù)不同的平臺返回不同的操作系統(tǒng)類,信號量類和互斥類。 class COperatingSystemFactory {public:static COperatingSystem *newOperatingSystem();static CCountingSem *newCountingSem(unsigned int init);static CMutex *newMutex(const char *pName=NULL);};
信號量基類,純虛函數(shù)定義了get和post信號量方法,子類必須根據(jù)系統(tǒng)類型進行不同的實現(xiàn) class CCountingSem {public:CCountingSem();~CCountingSem();virtual bool Get(Mode mode = kForever, unsigned long timeoutMS = 0) = 0;virtual bool Post(void) = 0;};
互斥基類,純虛函數(shù)定義了lock和unlock兩個方法,同樣,子類必須根據(jù)系統(tǒng)類型進行不同的實現(xiàn) class CMutex {public:CMutex(const char *pName = NULL);~CMutex();virtual bool Lock()=0;virtual bool UnLock()=0;protected:char *mutex_name; };

每日一道理
時間好比一條小溪,它能招引我們奔向生活的海洋;時間如同一葉扁舟,它將幫助我們駛向理想的彼岸;時間猶如一支畫筆,它會指點我們描繪人生的畫卷。

????

還有一個重頭是msgQueue類,下次說。

????


????

有了這些個基礎類以后,我們就可以開始了。

????

我們希望的結果是

????

用戶,也就是程序員啦,從CThread繼承一個自己的線程類,比如CTestThread,然后實現(xiàn)mainLoop方法,這樣,一個不考慮通信的線程就編寫完了,然后我只須要在main.cpp中new一下這個CTestThread,那么線程就啟動了,沒有其他任何繁瑣的操作。

????


????

要實現(xiàn)這樣的功能,下面那些個類須要怎么樣的組合調用呢?

????

首先,因為是在Linux下,所以全部的基類都要派生出Linux對應的子類(CThread不須要,因為是用戶編寫的,COperatingSystemFactory也不須要,因為是抽象工廠),所以,我們在Linux下創(chuàng)立了CLinuxMutex,CLinuxOperratingSystem,CLinuxCountingSem三個子類,并且在這些個子類中實現(xiàn)了基類中的純虛函數(shù)。

????

接著,我們new 一個 CTestThread 后,須要通過COperatingSystemFactory的newOperatingSystem 生成一個CLinuxOperratingSystem,然后CLinuxOperratingSystem調用createThread發(fā)生一個線程函數(shù),然后把CTestThread的mainLoop綁定到這個線程函數(shù)中。

????


????

對,就這么簡略

????


????

在github中下載了全部的文件以后,你只須要編寫你自己的線程類,如: class TestThread:public CThread {public:TestThread(const char *m_name);~TestThread();virtual void mainLoop(); }; //然后實現(xiàn)mainLoop方法: void TestThread::mainLoop() {while(1){printf("%s :hello world\n",p_thread_name);} }


????

然后在main.cpp中,調用一句話new一下這個類: TestThread *a=new TestThread("Thread A");
OK,一切搞定,當初運行,就可以不停的打出hello world了。

????

同樣,你也可以new多個實例

????

如果想要其他功能的線程,你再從CThread派生一個其他類就好了,很簡略吧。

????


????

略微龐雜一點的是線程通信,下次說。

????


????

代碼還沒有整頓完成,等整頓完成了一并傳到github上,大概還須要兩三天時間吧。

????


????


文章結束給大家分享下程序員的一些笑話語錄: 人腦與電腦的相同點和不同點,人腦會記憶數(shù)字,電腦也會記憶數(shù)字;人腦會記憶程序,電腦也會記憶程序,但是人腦具有感知能力,這種能力電腦無法模仿,人的記憶會影響到人做任何事情,但是電腦只有程序軟件。比爾還表示,人腦與電腦之間最重要的一個差別就是潛意識。對于人腦存儲記憶的特別之處,比爾表示,人腦并不大,但是人腦重要的功能是聯(lián)絡,人腦會把同樣的記憶存儲在不同的地方,因此記憶讀取的速度就不相同,而這種速度取決于使用的頻率和知識的重要性。人腦的記憶存儲能力會隨著年齡增長而退化,同時記憶的質量也會隨著年齡退化。經(jīng)典語錄網(wǎng)

轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/22/3093760.html

總結

以上是生活随笔為你收集整理的线程类C++多线程框架(一)--------- new一下就启动一个线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。