版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄一課程概述 .1 1.1. 設(shè)計構(gòu)想 .1 1.2. 需求分析 .1 1.3. 理論依據(jù) .1 1.4. 課程任務(wù) .1 二總體方案設(shè)計 .2 2.1 程序結(jié)構(gòu) .2 三詳細(xì)設(shè)計 .3 3.1.界面設(shè)計 .3 3.1.1.進(jìn)程屬性控制 .3 3.1.2.進(jìn)程算法 .3 3.1.3.進(jìn)程運(yùn)行狀態(tài)顯示 .4 3.1.4.設(shè)置停頓時間 .4 3.1.5.設(shè)置時間片 .5 3.1.6.菜單 .5 3.2.先來先服務(wù)調(diào)度 .6 3.2.1算法思想 .6 3.2.2.算法代碼 .6 3.2.3.算法流程圖 .7 3.3.時間片輪轉(zhuǎn)調(diào)度 .8 3.3.1.算法思想 .8 3.3.2算法流程圖 .8 3.
2、3.3.程序代碼 .9 3.4.優(yōu)先級調(diào)度 .9 3.4.1.算法思想 .9 3.4.2 算法流程圖 .10 3.4.3.程序代碼 .10 3.5.基礎(chǔ)函數(shù) . 11 3.5.1.進(jìn)度條設(shè)置 . 11 3.5.2.創(chuàng)建進(jìn)程pbc . 11 3.5.3.更新進(jìn)程運(yùn)行狀態(tài)顯示 .12 3.5.4.判斷當(dāng)前進(jìn)程是否創(chuàng)建 .13 3.5.5.創(chuàng)建時間隊列 .13 3.5.6.判斷所有進(jìn)程是否完成 .14 3.5.7.創(chuàng)建優(yōu)先權(quán)隊列 .14 3.5.8.先來先服務(wù)線程函數(shù) .15 3.5.9.時間片輪轉(zhuǎn)線程函數(shù) .15 3.5.10.高優(yōu)先級線程函數(shù) .16 3.5.11.保存輸入框修改線程函數(shù) .16
3、 3.5.12.保存輸入框修改 .16 3.5.13.子線程向主線程發(fā)送消息 .16 四程序的調(diào)試與運(yùn)行結(jié)果說明 .17 4.1.界面 .17 4.1.1問題 1 .17 4.2.先來先服務(wù)調(diào)度 .17 4.2.1問題 1 .17 4.3.時間片輪轉(zhuǎn)調(diào)度 .18 4.3.1問題 1 .18 4.3.2 問題 2 .18 4.4.高優(yōu)先級優(yōu)先調(diào)度 .19 4.4.1問題 1 .19 4.5 基礎(chǔ)函數(shù)調(diào)試 .20 4.5.1問題 1 .20 4.5.2問題 2 .20 五課程設(shè)計總結(jié) .21 六后記 .21 七致謝 .21 八附錄 .22 8.1.進(jìn)程狀態(tài)宏 .22 8.2.進(jìn)程隊列結(jié)點 .22
4、8.3.主框架構(gòu)造函數(shù) .22 8.4.界面控件與類變量鏈接 .22 參考文獻(xiàn) .24 1 一課程概述1.1. 設(shè)計構(gòu)想程序能夠完成以下操作:1、創(chuàng)建進(jìn)程。2、修改進(jìn)程的優(yōu)先級、創(chuàng)建時間、服務(wù)時間。3、啟動進(jìn)程算法,先來先服務(wù)、時間片輪轉(zhuǎn)、高優(yōu)先級優(yōu)先調(diào)度。4、進(jìn)程運(yùn)行狀態(tài)顯示。1.2. 需求分析在多道程序環(huán)境下,主存中有著多個進(jìn)程,其數(shù)目往往多于處理機(jī)數(shù)目,要使這多個進(jìn)程能夠并發(fā)地執(zhí)行,這就要求系統(tǒng)能按某種算法,動態(tài)地把處理機(jī)分配給就緒隊列中的一個進(jìn)程,使之執(zhí)行。分配處理機(jī)的任務(wù)是由處理機(jī)調(diào)度程序完成的。由于處理機(jī)是最重要的計算機(jī)資源,提高處理機(jī)的利用率及改善系統(tǒng)必(吞吐量、響應(yīng)時間),在很
5、大程度上取決于處理機(jī)調(diào)度性能的好壞,因而,處理機(jī)調(diào)度便成為操作系統(tǒng)設(shè)計的中心問題之一。本次實驗在vs2010 環(huán)境下實現(xiàn)先來先服務(wù)調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法和高優(yōu)先權(quán)調(diào)度算法。1.3. 理論依據(jù)為 了 描 述 和 管 制 進(jìn) 程 的 運(yùn) 行 , 系 統(tǒng) 為 每 個 進(jìn) 程 定 義 了 一 個 數(shù) 據(jù) 結(jié) 構(gòu) 進(jìn) 程 控 制 塊pcb(process control block),pcb 中記錄了操作系統(tǒng)所需的、用于描述進(jìn)程的當(dāng)前情況以及控制進(jìn)程運(yùn)行的全部信息,系統(tǒng)總是通過pcb對進(jìn)程進(jìn)行控制,亦即,系統(tǒng)是根據(jù)進(jìn)程的pcb而不是任何別的什么而感知進(jìn)程的存在的,pcb是進(jìn)程存在的惟一標(biāo)志。本次課
6、程設(shè)計用結(jié)構(gòu)體pronode 代替 pcb的功能。1.4. 課程任務(wù)1、用 c語言(或 c+ )編程實現(xiàn)操作模擬操作系統(tǒng)進(jìn)程調(diào)度子系統(tǒng)的基本功能;運(yùn)用多種算法實現(xiàn)對進(jìn)程的模擬調(diào)度。2、通過編寫程序?qū)崿F(xiàn)進(jìn)程或作業(yè)先來先服務(wù)、按時間片輪轉(zhuǎn)、高優(yōu)先權(quán),使學(xué)生進(jìn)一步掌握進(jìn)程調(diào)度的概念和算法,加深對處理機(jī)分配的理解。3、用 mfc實現(xiàn)程序界面。1.5. 功能模塊分析:1、 進(jìn)程概念: 進(jìn)程是被獨(dú)立分配資源的最小單位。進(jìn)程是動態(tài)概念, 必須程序運(yùn)行才有進(jìn)程的產(chǎn)生。2、進(jìn)程的狀態(tài)模型:(1)完成:進(jìn)程已經(jīng)完成。(2)就緒:進(jìn)程已經(jīng)準(zhǔn)備好,一旦有處理器就可運(yùn)行。3、處理機(jī)調(diào)度:在多道程序設(shè)計系統(tǒng)中,內(nèi)存中有多
7、道程序運(yùn)行,他們相互爭奪處理機(jī)這一重要的資源。處理機(jī)調(diào)度就是從就緒隊列中,按照一定的算法選擇一個進(jìn)程并將處理機(jī)分配給它運(yùn)行,以實現(xiàn)進(jìn)程并發(fā)地執(zhí)行。4、進(jìn)程調(diào)度算法的功能:記錄系統(tǒng)中所有進(jìn)程的執(zhí)行情況、選擇占有處理機(jī)的進(jìn)程、進(jìn)行進(jìn)程的上下文切換。5、進(jìn)程調(diào)度的算法:( 1)先來先服務(wù)算法:如果早就緒的進(jìn)程排在就緒隊列的前面,遲就緒的進(jìn)程排在就緒隊列的后面,那么先來先服務(wù)總是把當(dāng)前處于就緒隊列之首的那個進(jìn)程調(diào)度到運(yùn)行狀態(tài)。(2)時間片輪轉(zhuǎn)算法:固定時間片,每個進(jìn)程在執(zhí)行一個時間片后,輪到下一進(jìn)程執(zhí)行,知道所有的進(jìn)程執(zhí)行完畢。處理器同一個時間只能處理一個任務(wù)。處理器在處理多任務(wù)的時候,就要看請求的時
8、間順序,如果時間一致,就要進(jìn)行預(yù)測。挑到一個任務(wù)后,需要若干步驟才能做完,這些步驟中有些需要處理器參與,有些不需要(如磁盤控制器的存儲過程)。不需要處理器處理的時候,這部分時間就要分配給其他的進(jìn)程。原來的進(jìn)程就要處于等待的時間段上。經(jīng)過周密分配時間,宏觀上就象是多2 個任務(wù)一起運(yùn)行一樣,但微觀上是有先后的,就是時間輪換。( 3)優(yōu)先數(shù)算法:即進(jìn)程的執(zhí)行順序由高優(yōu)先級到低優(yōu)先級。系統(tǒng)或用戶按某種原則為進(jìn)程指定一個優(yōu)先級來表示該進(jìn)程所享有的確調(diào)度優(yōu)先權(quán)。該算法核心是確定進(jìn)程的優(yōu)先級。二總體方案設(shè)計2.1 程序結(jié)構(gòu)程序一共添加了4 個線程,分別是保存修改線程,先來先服務(wù)線程,時間片輪轉(zhuǎn)線程,高優(yōu)先權(quán)
9、優(yōu)先服務(wù)線程。圖 2.1 程序結(jié)構(gòu)圖優(yōu)先級進(jìn)程調(diào)度主模塊進(jìn)程控制界面進(jìn)程調(diào)度算法進(jìn)程狀態(tài)界面先來先服務(wù)算法時間片輪轉(zhuǎn)算法高優(yōu)先權(quán)優(yōu)先調(diào)度算法創(chuàng)建時間服務(wù)時間3 三詳細(xì)設(shè)計3.1.界面設(shè)計圖 3.1 界面設(shè)計3.1.1.進(jìn)程屬性控制圖 3.1.1.進(jìn)程屬性控制3.1.2.進(jìn)程算法圖 3.1.2.進(jìn)程算法4 3.1.3.進(jìn)程運(yùn)行狀態(tài)顯示. 圖 3.1.2.進(jìn)程算法3.1.4.設(shè)置停頓時間圖 3.1.4設(shè)置停頓時間 相關(guān)類及其主要函數(shù)class settime : public cdialogex declare_dynamic(settime) public: settime(cwn
10、d* pparent = null); / 標(biāo)準(zhǔn)構(gòu)造函數(shù)virtual settime(); / 對話框數(shù)據(jù)enum idd = idd_settime ; protected: virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map() public: int m_time; ; settime:settime(cwnd* pparent /*=null*/) : cdialogex(settime:idd, pparent) , m_time(3) 5 3.1.5.設(shè)置時間片圖 3.1
11、.5 設(shè)置時間片 相關(guān)類及其主要函數(shù)class seep : public cdialogex declare_dynamic(seep) public: seep(cwnd* pparent = null); / 標(biāo)準(zhǔn)構(gòu)造函數(shù)virtual seep(); / 對話框數(shù)據(jù)enum idd = idd_sleep ; protected: virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map() public: int m_sleep; ; 3.1.6.菜單圖 3.1.5
12、設(shè)置時間片保存輸入框修改void cprogressdlg:onsave() cwinthread *mainstartthread; lpvoid lmainparam = (lpvoid)this;/把this指針作為參數(shù)傳進(jìn)去6 mainstartthread=:afxbeginthread( threadfuncsave, (lpvoid)lmainparam, thread_priority_normal, 0, 0, null ); 設(shè)置時間片大小void cprogressdlg:onsetrr() settime dlg; if( dlg.domod
13、al() = idok) m_timerr = dlg.m_time; 設(shè)置停頓時間void cprogressdlg:onseeptime() seep dlg; if(dlg.domodal() = idok) m_sleep = dlg.m_sleep; 3.2.先來先服務(wù)調(diào)度3.2.1算法思想先來先服務(wù)調(diào)度算法的思想是按照進(jìn)程進(jìn)入就緒隊列的先后順序調(diào)度并分配處理機(jī)執(zhí)行。先來先服務(wù)調(diào)度算法是一種不可搶占的算法,先進(jìn)入就緒隊列的進(jìn)程,先被處理機(jī)運(yùn)行。一旦一個進(jìn)程占有了處理機(jī),它就一直運(yùn)行下去,直到該進(jìn)程完成工作或者因為等待某事件而不能繼續(xù)運(yùn)行時才釋放處理機(jī)。3.2.2.算法代
14、碼void cprogressdlg:fcfs(void) int i=0,j; createtimearray();/ 創(chuàng)建時間數(shù)組while(!isfinish() /找出已創(chuàng)建的進(jìn)程while(!iscreate(m_timei) | m_pronodem_state = finish) +i; 7 if(i=5) m_systime += 1; i=0; proshow();/ 更新進(jìn)程運(yùn)行狀態(tài) /進(jìn)程服務(wù)for(j=0; j=5) m_systime += 1; i=0; proshow();/ 更新進(jìn)程運(yùn)行狀態(tài) /進(jìn)程服務(wù)for(int r=0; r=5) i=0
15、; 3.4.優(yōu)先級調(diào)度3.4.1.算法思想進(jìn)程的執(zhí)行順序由高優(yōu)先級到低優(yōu)先級,系統(tǒng)或用戶按某種原則為進(jìn)程指定一個優(yōu)先級來表示該進(jìn)程所享有的確調(diào)度優(yōu)先權(quán)。該算法核心是確定進(jìn)程的優(yōu)先級。1 03.4.2 算法流程圖圖 3.4. 優(yōu)先級調(diào)度流程圖3.4.3.程序代碼void cprogressdlg:hphs(void) int i=0; createproarray();/ 創(chuàng)建時間數(shù)組while(!isfinish() i=0; /找出已創(chuàng)建的進(jìn)程while(!iscreate(m_proi) | m_pronodem_state = finish) +i; if(i=5) 運(yùn)行
16、進(jìn)程取出進(jìn)程是否創(chuàng)建創(chuàng)建進(jìn)程隊列(優(yōu)先級)是否完成開始結(jié)束y n n y 1 1 m_systime += 1; i=0; proshow();/ 更新進(jìn)程運(yùn)行狀態(tài) /進(jìn)程服務(wù)for(int r=0; rsetrange32(0,ser); proset-setstep(1); proset-setpos(0); 3.5.2.創(chuàng)建進(jìn)程pbc 圖 3.5.2 創(chuàng)建進(jìn)程pbc 流程圖i5 結(jié)束開始int i=0,pro,cre,ser; m_systime=0; 否是逐個創(chuàng)建1 2void cprogressdlg:createpro(void) int pro,cre,ser; m_systim
17、e = 0; for (int i=0; isetwindowtextw(str); m_proctrl2.setpos(m_pronode1.finishpart); str.format(_t(%d),m_pronode1.finishpart); getdlgitem(idc_static2)-setwindowtextw(str); m_proctrl3.setpos(m_pronode2.finishpart); str.format(_t(%d),m_pronode2.finishpart); getdlgitem(idc_static3)-setwindowtextw(str);
18、 m_proctrl4.setpos(m_pronode3.finishpart); str.format(_t(%d),m_pronode3.finishpart); getdlgitem(idc_static4)-setwindowtextw(str); m_proctrl5.setpos(m_pronode4.finishpart); str.format(_t(%d),m_pronode4.finishpart); getdlgitem(idc_static5)-setwindowtextw(str); str.format(_t( 運(yùn)行時間: %d),m_systime); getd
19、lgitem(idc_static6)-setwindowtextw(str); sleep(m_sleep); 1 33.5.4.判斷當(dāng)前進(jìn)程是否創(chuàng)建bool cprogressdlg:iscreate(int index) if(m_pronodeindex.createtimem_systime) return false; else return true; 3.5.5.創(chuàng)建時間隊列圖 3.5.5 創(chuàng)建時間隊列流程圖void cprogressdlg:createtimearray(void) int time = 100,s; for(int j=0; j5; +j) for(int
20、 i=0; i5; +i) if(m_pronodei.createtimetime & m_pronodei.rr=-1) 開始int time-100,s,i-0,j-0 j5 i5 time=createtime; s=i; createtimetime&rr=-1 rr=0; m_timei=s; time=100; 結(jié)束n y n y y n 1 4time=m_pronodei.createtime; s=i; m_pronodes.rr = 0; m_timej=s; time = 100; 3.5.6.判斷所有進(jìn)程是否完成bool cprogressdlg:is
21、finish(void) int pronum = 5,i; /是否所有進(jìn)程完成for(i=0; i5; +i) if(m_state) = finish) pronum -= 1; if(pronum != 0) return false; else return true; 3.5.7.創(chuàng)建優(yōu)先權(quán)隊列開始int time-100,s,i-0,j-0 j5 i5 pro=; s=i; protime&rr=-1 rr=0; m_proi=s; pro=100; 結(jié)束n y n y y n 1 5圖 3.5.7創(chuàng)建優(yōu)先權(quán)隊列流程圖void
22、 cprogressdlg:createproarray(void) int pro = 100,s=0; for(int j=0; j5; +j) for(int i=0; i5; +i) if(m_createpro(); dlg-fcfs(); criticalsection.unlock(); return 0; 3.5.9.時間片輪轉(zhuǎn)線程函數(shù)uint threadfuncrr(lpvoid lp) criticalsection.lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-createpr
23、o(); dlg-rr(); criticalsection.unlock(); return 0; 1 63.5.10.高優(yōu)先級線程函數(shù)uint threadfunchphs(lpvoid lp) criticalsection.lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-createpro(); dlg-hphs(); criticalsection.unlock(); return 0; 3.5.11.保存輸入框修改線程函數(shù)uint threadfuncsave(lpvoid lp) criticalsection.
24、lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-save(); dlg-messagebox(_t( 修改成功! ),_t( 提示 ),mb_ok); criticalsection.unlock(); return 0; 3.5.12.保存輸入框修改void cprogressdlg:save(void) sendmessage(um_myupdatedata,true); proset(&m_proctrl1,m_ser1); proset(&m_proctrl2,m_ser2); proset(&
25、m_proctrl3,m_ser3); proset(&m_proctrl4,m_ser4); proset(&m_proctrl5,m_ser5); getdlgitem(idc_static1)-setwindowtextw(_t(0); getdlgitem(idc_static2)-setwindowtextw(_t(0); getdlgitem(idc_static3)-setwindowtextw(_t(0); getdlgitem(idc_static4)-setwindowtextw(_t(0); getdlgitem(idc_static5)-setwindo
26、wtextw(_t(0); getdlgitem(idc_static6)-setwindowtextw(_t(運(yùn)行時間: 0); 3.5.13.子線程向主線程發(fā)送消息afx_msg lresult cprogressdlg:onummyupdatedata(wparam wparam, lparam lparam) updatedata(wparam); return 0; 1 7四程序的調(diào)試與運(yùn)行結(jié)果說明4.1.界面4.1.1問題 1 程序界面出現(xiàn)“卡死”現(xiàn)象原因,當(dāng)程序只有一個主線程的時候,程序只有完成當(dāng)前操作的時候才會執(zhí)行下一個操作任務(wù)。解決辦法,分別添加四個線程,分別是保存修改線程,
27、先來先服務(wù)線程,時間片輪轉(zhuǎn)線程,高優(yōu)先權(quán)優(yōu)先服務(wù)線程。圖 4.1.1界面調(diào)試4.2.先來先服務(wù)調(diào)度4.2.1問題 1 無法正確按照時間先后順序調(diào)用線程。原因是直接修改pcb隊列會導(dǎo)致界面的實現(xiàn)比較困難,但是不修改又會導(dǎo)致無法正確調(diào)度進(jìn)程或者需要更多的函數(shù)輔助,以便實現(xiàn)相應(yīng)的功能。解決辦法,創(chuàng)建時間隊列,添加函數(shù)void cprogressdlg:createtimearray(void)圖 4.2. 先來先服務(wù)調(diào)度調(diào)試1 84.3.時間片輪轉(zhuǎn)調(diào)度4.3.1問題 1 進(jìn)程時間片結(jié)束還沒有切換下一個線程。解決辦法修改該段代碼m_systime += 1; m_pronodem_timei.fini
28、shpart += 1; proshow();/ 更新進(jìn)程運(yùn)行狀態(tài)改成如下代碼if(m_pronodem_timei.finishpart = m_pronodem_timei.servetime) m_pronodem_state = finish; else m_systime += 1; m_pronodem_timei.finishpart += 1; proshow();/ 更新進(jìn)程運(yùn)行狀態(tài) 圖 4.3.1 時間片輪轉(zhuǎn)調(diào)度調(diào)試4.3.2 問題 2 進(jìn)程間能切換的時候,發(fā)現(xiàn)進(jìn)程的時間片到了,還繼續(xù)對當(dāng)前進(jìn)程服務(wù),直到進(jìn)程運(yùn)行完成。原因是進(jìn)程的創(chuàng)建時間隊列沒有形成“環(huán)”
29、從隊頭到對尾的時候沒有再跳回隊頭。解決辦法,添加以下代碼,當(dāng)執(zhí)行到隊尾的時候,就跳回隊頭。+i; if (i=5) i=0;1 9圖 4.3.2 時間片輪轉(zhuǎn)調(diào)度調(diào)試4.4.高優(yōu)先級優(yōu)先調(diào)度4.4.1問題 1 無法正確按照優(yōu)先權(quán)高低調(diào)用進(jìn)程。原因是直接修改pcb隊列會導(dǎo)致界面的實現(xiàn)比較困難,但是不修改又會導(dǎo)致無法正確調(diào)度進(jìn)程或者需要更多的函數(shù)輔助,以便實現(xiàn)相應(yīng)的功能。解決辦法,創(chuàng)建優(yōu)先權(quán)隊列,添加函數(shù)void cprogressdlg:createproarray()圖 4.4.1高優(yōu)先級優(yōu)先調(diào)度2 04.5 基礎(chǔ)函數(shù)調(diào)試4.5.1 問題 1 執(zhí)行 threadfuncsave函數(shù)的時候出現(xiàn)如下
30、錯誤。圖 4.5.1hreadfuncsave函數(shù)調(diào)試導(dǎo)致錯誤的代碼是:dlg-updatedata(true); 原因該子線程通過主框架對象的指針,修改了主線程的數(shù)據(jù),而主線程有自己的安全保護(hù)措施,禁止子線程主動修改主線程的數(shù)據(jù),所以導(dǎo)致了錯誤。解決辦法,添加一個自定義消息,子線程向主線程發(fā)送消息,讓主線程自己修改數(shù)據(jù)。繞過主線程的保護(hù)措施。#define um_myupdatedata wm_user+100/自定義消息(子線程向主線程發(fā)送消息)afx_msg lresult cprogressdlg:onummyupdatedata(wparam wparam, lparam lpara
31、m) updatedata(wparam); return 0; 4.5.2 問題2 導(dǎo)致錯誤的代碼是:void cprogressdlg:onsetrr() settime dlg; if ( dlg.domodal() = idok) m_timerr = dlg.getdlgitemint(idc_timeedit); 原因?qū)懥?if(dlg.domodal() = idok)點擊 ok 后,窗口已經(jīng)關(guān)閉,不能使用getdlgitemint ,繼續(xù)使用會出現(xiàn)野指針的問題。2 1解決辦法:窗口對象消除了,但是對象的數(shù)據(jù)還沒有被析構(gòu)函數(shù)清除。修改該代碼m_timerr = dlg.getdl
32、gitemint(idc_timeedit); 改成 m_timerr = dlg.m_time; 五課程設(shè)計總結(jié)通過做本實驗,我在以前學(xué)過的知識的基礎(chǔ)上有了提高,學(xué)到了很多新知識:比如將用戶作業(yè)和就緒進(jìn)程按提交的順序或變?yōu)榫途w狀態(tài)的先后排成隊列,并按照先來先服務(wù)的方式進(jìn)行調(diào)度。調(diào)度時從后備隊列中選擇若干優(yōu)先權(quán)最高的個作業(yè)進(jìn)入內(nèi)存;或從就緒隊列中選擇優(yōu)先權(quán)最高的進(jìn)程,將處理機(jī)分配給它。對進(jìn)程優(yōu)先、進(jìn)程或作業(yè)先來先服務(wù)、按時間片輪轉(zhuǎn)調(diào)度算法以及進(jìn)程調(diào)度的概念和算法,有了更深入的認(rèn)識!初步理解了操作系統(tǒng)對于作業(yè)處理的基本思想!了解到算法很重要,又更加明白算法本身可以節(jié)約時間,而且不同的函數(shù)之間在調(diào)
33、用的時候要注意很多的問題。在動手操作過程中,體會到了成功的喜悅和遇到問題自己解決的能力,對于我來說是一次提高,讓自己多多的在實踐中可以加深對理論的理解,也讓我明白了以后應(yīng)該如何更好,更高效的學(xué)習(xí)。六后記經(jīng)過兩周的時間,課程設(shè)計終于完成了,他鍛煉了我查閱資料,進(jìn)行方案構(gòu)思的能力。在設(shè)計過程中,我按照實驗要求逐步完善設(shè)計方案,較好的完成了設(shè)計任務(wù)。這次課程設(shè)計,由于理論知識的不足,再加上平時沒有設(shè)計經(jīng)驗,一開始有些手忙腳亂,不知從何入手。但在組員們的熱情幫助下,使我順利地完成了設(shè)計。雖然困難很多,但是我盡了自己最大的努力去克服,然而還是難免有些疏忽和遺漏的地方。這次課程設(shè)計對我而言是對計算機(jī)操作系
34、統(tǒng)課程內(nèi)容掌握情況的一次自我驗證和對以前所學(xué)的各種計算機(jī)語言的一種檢驗,從而有著極其重要的意義。通過這次課程設(shè)計提高了對所學(xué)知識的綜合應(yīng)用能力。七致謝2 2我 們 全 組 人 員 感 謝 給 過 我 幫 助 和 關(guān) 注 的 所 有 人 , 更 加 感 謝 張 威 老 師 帶 領(lǐng) 我 們 完 成 這 次 課程 設(shè) 計 ,指 出 我 們 的 不 足 之 處 ,鼓 勵 我 們 繼 續(xù) 努 力 。組 長 我 感 謝 組 員 的 默 契 配 合 與 相 互 合 作 。謝 謝 大 家八附錄8.1.進(jìn)程狀態(tài)宏#definefinish 0 #defineready 1 8.2.進(jìn)程隊列結(jié)點struct pr
35、onode int pro;/ 優(yōu)先級int createtime;/ 創(chuàng)建時間int servetime;/ 服務(wù)時間int finishpart;/ 完成部分int prostate;/進(jìn)程狀態(tài)int rr;/ 是否加入數(shù)組; 8.3.主框架構(gòu)造函數(shù)cprogressdlg:cprogressdlg(cwnd* pparent /*=null*/) : cdialogex(cprogressdlg:idd, pparent) m_hicon = afxgetapp()-loadicon(idr_mainframe); m_systime = 0; m_pri1 = 2; m_pri2 =
36、4; m_pri3 = 1; m_pri4 = 3; m_pri5 = 5; m_cre1 = 4; m_cre2 = 3; m_cre3 = 8; m_cre4 = 2; m_cre5 = 10; m_ser1 = 9; m_ser2 = 8; m_ser3 = 12; m_ser4 = 6; m_ser5 = 10; m_timerr = 3; m_sleep = 450; 8.4.界面控件與類變量鏈接void cprogressdlg:dodataexchange(cdataexchange* pdx) 2 3 cdialogex:dodataexchange(pdx); ddx_text(pdx, idc_priority1, m_pri1); ddv_minmaxint(pdx, m_pri1, 1, 5); ddx_text(pdx, idc_priority2, m_pri2); ddv_minmaxint(pdx, m_pri2, 1, 5); ddx_text(pdx, idc_priority3, m_pri3); ddv_minmaxint(pdx, m_pri3, 1, 5); ddx_text(pdx, idc_priority4, m_pri4);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年牛津上海版選擇性必修3化學(xué)上冊月考試卷
- 2025年滬教版九年級歷史下冊階段測試試卷含答案
- 2025年外研版選擇性必修2物理上冊月考試卷
- 2024年華東師大版九年級地理下冊階段測試試卷
- 2025年人教新起點八年級科學(xué)下冊階段測試試卷含答案
- 2025年冀教新版七年級歷史上冊月考試卷含答案
- 二零二五版木托盤加工與組裝業(yè)務(wù)合同3篇
- 2025年度文化創(chuàng)意產(chǎn)業(yè)納稅擔(dān)保與版權(quán)保護(hù)合同4篇
- 2025年度南京市二手房買賣合同房屋交接服務(wù)合同4篇
- 二零二五年度農(nóng)產(chǎn)品電商平臺知識產(chǎn)權(quán)保護(hù)合同4篇
- 鄉(xiāng)村治理中正式制度與非正式制度的關(guān)系解析
- 2024版義務(wù)教育小學(xué)數(shù)學(xué)課程標(biāo)準(zhǔn)
- 智能護(hù)理:人工智能助力的醫(yī)療創(chuàng)新
- 國家中小學(xué)智慧教育平臺培訓(xùn)專題講座
- 5G+教育5G技術(shù)在智慧校園教育專網(wǎng)系統(tǒng)的應(yīng)用
- 服務(wù)人員隊伍穩(wěn)定措施
- VI設(shè)計輔助圖形設(shè)計
- 淺談小學(xué)勞動教育的開展與探究 論文
- 2023年全國4月高等教育自學(xué)考試管理學(xué)原理00054試題及答案新編
- 河北省大學(xué)生調(diào)研河北社會調(diào)查活動項目申請書
- JJG 921-2021環(huán)境振動分析儀
評論
0/150
提交評論