Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3

Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3

ID:40557947

大?。?5.50 KB

頁數(shù):6頁

時(shí)間:2019-08-04

Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3_第1頁
Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3_第2頁
Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3_第3頁
Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3_第4頁
Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3_第5頁
資源描述:

《Linux高級環(huán)境編程實(shí)驗(yàn)報(bào)告3》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、作業(yè)報(bào)告學(xué)生姓名:學(xué)號:指導(dǎo)教師:學(xué)生E-mail:一、作業(yè)名稱:自定義消息隊(duì)列二、作業(yè)要求自行設(shè)計(jì)一個消息隊(duì)列(不能依賴已有庫的隊(duì)列),實(shí)現(xiàn)一般隊(duì)列的操作:入列、出列以及隊(duì)列判空,另外要保證線程安全,并且能夠接收CLMessage類繼承體系的消息;需要提供發(fā)送消息的通信類,以及循環(huán)消息的管理類,保證能夠支持線程之間的通信。三、設(shè)計(jì)與實(shí)現(xiàn)根據(jù)要求分析,首先不能依賴已有庫的隊(duì)列,我們可以利用單鏈表來創(chuàng)建一個隊(duì)列,對于消息的出隊(duì)與入隊(duì)操作,需要設(shè)定兩個指針,頭指針和尾指針,分別指向隊(duì)頭和隊(duì)尾,根據(jù)隊(duì)

2、列的要求,隊(duì)頭處只能讀(出隊(duì)),隊(duì)尾只能寫(入隊(duì))。對于判空操作,設(shè)定隊(duì)頭指針等于隊(duì)尾指針時(shí)為空。代碼清單3.1自定義隊(duì)列的實(shí)現(xiàn)structCLNode//鏈表節(jié)點(diǎn){Tdata;structCLNode*next;};templateclassCLMyQueue{private:structCLNode*QueueHead;//隊(duì)頭指針structCLNode*QueueTail;//隊(duì)尾指針public:CLMyQueue();~CLMyQueue();voidPu

3、sh(Tdata);//數(shù)據(jù)入隊(duì)操作TPop();//數(shù)據(jù)出隊(duì)操作boolIsEmpty();//不能從空隊(duì)列讀數(shù)據(jù),因此需進(jìn)行隊(duì)列判空};templateCLMyQueue::CLMyQueue()//構(gòu)造函數(shù)中對隊(duì)列進(jìn)行初始化操作,隊(duì)頭、隊(duì)尾置空{(diào)QueueHead=NULL;QueueTail=NULL;}templateCLMyQueue::~CLMyQueue()//析構(gòu)函數(shù)清空隊(duì)列中的所有數(shù)據(jù){while(QueueHead!=NULL)/

4、/隊(duì)頭不為空,則清除隊(duì)頭,繼續(xù)找隊(duì)頭的后繼結(jié)點(diǎn),刪除所有的結(jié)點(diǎn)數(shù)據(jù){structCLNode*t=QueueHead;QueueHead=QueueHead->next;deletet;}}templatevoidCLMyQueue::Push(Tdata)//數(shù)據(jù)入隊(duì)操作{if(IsEmpty())//如果隊(duì)列為空,將數(shù)據(jù)入隊(duì),并且隊(duì)頭和隊(duì)尾指針都指向該數(shù)據(jù){QueueHead=newstructCLNode;QueueHead->data=data;Queu

5、eTail=QueueHead;return;}//在隊(duì)尾插入數(shù)據(jù)structCLNode*newNode=newstructCLNode;newNode->data=data;newNode->next=NULL;QueueTail->next=newNode;QueueTail=newNode;}templateTCLMyQueue::Pop()//數(shù)據(jù)出隊(duì)操作{if(IsEmpty())//不能從空隊(duì)列中讀數(shù)據(jù),因此判定隊(duì)列是否為空,空則返回空指針{ret

6、urnNULL;}Tdata=QueueHead->data;//取出對頭數(shù)據(jù),并修改隊(duì)頭指針structCLNode*t=QueueHead;QueueHead=QueueHead->next;deletet;returndata;}templateboolCLMyQueue::IsEmpty()//判斷隊(duì)列是否為空{(diào)if(QueueHead==NULL)//當(dāng)隊(duì)頭指針為空時(shí),隊(duì)列為空{(diào)returntrue;}returnfalse;}代碼清單3.1給出了自定義消息

7、隊(duì)列的實(shí)現(xiàn)。開始定義了單鏈表結(jié)點(diǎn)的結(jié)構(gòu)。在自定義隊(duì)列類CLMyQueue中給出了入隊(duì)和出隊(duì)的操作,分別是Push和Pop函數(shù),當(dāng)然,要注意一些細(xì)節(jié),在出隊(duì)時(shí)要判斷隊(duì)列是否為空,若為空則無法進(jìn)行出隊(duì)操作,同樣在進(jìn)行入隊(duì)操作是要判斷是否隊(duì)滿。四、測試自定義兩個CLMessage類的繼承體,封裝乘法操作的CLMultipMessage消息類和CLQuitMessage退出消息類,定義子線程的回調(diào)函數(shù),即子線程的執(zhí)行體。在main()函數(shù)中,創(chuàng)建子線程,主線程向消息隊(duì)列傳遞CLSUBMessage消息和

8、CLQuitMessage消息。子線程從隊(duì)列中獲取消息,并執(zhí)行相應(yīng)消息體操作如減法操作和退出操作。代碼清單4.1測試代碼classCLMsgPro;classCLMultipMessage:publicCLMessage//繼承CLMessage的乘法消息{public:friendclassCLMsgPro;CLMultipMessage(intOp1,intOp2):CLMessage(MULTIP_MSG)//構(gòu)造函數(shù)初始化{m_Op1=Op1;m_Op2=Op2;}virtual~CLM

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。