CBuilder多执行绪(Multi-Thread).ppt
《CBuilder多执行绪(Multi-Thread).ppt》由会员分享,可在线阅读,更多相关《CBuilder多执行绪(Multi-Thread).ppt(37页珍藏版)》请在三一办公上搜索。
1、1,第三十三章 多執行緒(Multi-Thread),在這一章,我們將會提到Multi-Thread到底是什麼東西,他在BCB的環境中該如何實作,並且實際了解在程式中使用Multi-Thread會帶來什麼樣的優點與缺點。,2,大綱,33-1.什麼是Thread 33-2.第一個Thread程式 33-3.Thread程式的應用 本章習題,3,33-1.什麼是Thread,常常可以聽到很多作業系統的廣告上都會聲稱自己擁有多工的處理模式,也有很多作業系統都支援多處理器的系統,其實這些多工或是多處理器的運作基礎都是Multi Thread。我們先用兩張圖來表示什麼是Non Thread的運作模式,什
2、麼是Multi Thread的運作模式。,Non Thread,Multi Thread,4,33-1.什麼是Thread,利用上面這兩張圖來做解釋,在整個運作的時間內總共有三個Process在運作。假設現在我們使用的是Non Thread的模式在運作,這三個Process必須排隊,等前面那一個Process結束了才可以進行下一個Process的操作;反之,在Multi Thread的運作模式下,只要該Process一進入CPU的處理排程內,就可以馬上獲得CPU Time來運作,只不過這三個Process在這種情況下並無法獨占整個CPU的資源,並須和其他的Process共享。,5,33-1.什
3、麼是Thread,不管在Non Thread或是Multi Thread的運作模式中,在一樣的資源下效能並不會有什麼增進,甚至在Multi Thread的模式下還會花比較久的時間才能完成(因為有許多Content Switching或是Interrupt的動作)。不過因為在Multi Thread的情況下可以多個程式一起執行,所以在使用上會比較方便,除非有自行調整各個Thread的優先權,否則在同一台機器上的Thread的優先權都是平等的!例如我們在電腦上可以一邊使用Word,聽mp3,使用Visio畫圖,利用瀏覽器搜尋網頁,寫程式等等,只要電腦夠Powerful,這些事情都可以在同一個時間做
4、,因為現在的OS(Operating System)都已經支援多工了,只是越多工作同時進行,執行的效率也會越低。,6,33-1.什麼是Thread,除了上述我們舉了一個大家常接觸到的多工環境外,在Server等級的機器上,多工更是顯的重要,例如現在有100個人想要利用這台伺服器工作,如果沒有了多工,這台Server大概會被使用者唾棄,因為他每次只能處理一個Request,大家光是在排隊等CPU Time的時間就浪費了不少。反之,如果有多工的機制存在,Server可以將這些要求全部Create成Thread,並且將他們都放到背景執行,這樣將不會造成有些程序一直等待的情況。,7,33-1.什麼是T
5、hread,下圖就是我們針對一個Process將他分成多個Thread,讓這些Thread都可以同時取得CPU的資源,如果將下圖的Process換成Machine,Thread換成Process,這就是我們上面一直提到的多工處理了。,8,33-1.什麼是Thread,從前面的介紹可以得知,Thread在執行的時候並不是一直都在執行,而是斷斷續續的執行,所以這之間就會有許多Interrupt和Content Switching等相關System Work需要處理,當一個Thread暫時失去CPU Time的時候,就是進入Sleep的狀態,我們用下圖來告訴各位,一個Thread的Life Cycl
6、e倒底是長什麼樣子!,9,33-2.第一個Thread程式,在這一小節我們將利用範例33-1建立一個最基本的Thread程式。我們在底下將會一步一步引導著各位讀者完成該範例。首先我們先簡單的介紹該如何在BCB中建立一個Thread Object。要在BCB中建立一個Thread Object最簡單就是在New的對話窗中選擇Thread Object,接著會跳出一個對話窗讓我們輸入該Thread Object的Class Name;底下則還有一個Check Box讓我們決定是不是要設定Thread Name。當我們設定了Thread Name之後,BCB將會在Thread start的時候自動去
7、呼叫SetName這個Method。當我們按下對話窗OK的按鈕後,BCB就會自動幫我們Generate出該Thread的相關程式碼,這個Thread該做什麼事情就是由這個unit.cpp所決定的!,10,33-2.第一個Thread程式,在BCB自動產生的程式碼中有三個重要函式Synchronize(UpdateCaption)在這段預設產生的程式碼中有一小段文字提到Synchronize(UpdateCaption)的用法。那段文字說明了,當我們在Thread中要使用VCL元件,一定要執行Synchronize(UpdateCaption)這個函式,否則會發生不可預期的錯誤,例如這個註解所提
8、到的現象,假設有多個Thread都同時想要更改同一個VCL元件的Caption屬性,這時候就會發生不可預期的錯誤,包括資料上的錯誤等等;如果我們在最前面使用Synchronize將UpdateCaption這個函式處理之後,就可以避免相關的錯誤發生。,11,33-2.第一個Thread程式,在BCB自動產生的程式碼中有三個重要函式(2)void MyThread:SetName()這個函式只有在我們有設定Thread Name的情況下才會發生,各位讀者想一下剛剛看到的那一小段英文,以及筆者對那段英文的簡單說明,是不是有提到在Thread被設定了Thread Name之後,BCB會在該Threa
9、d Start的時候自動去呼叫SetName這個Method。void _fastcall MyThread:Execute()這個函式就是決定這個Thread要作什麼樣的工作。例如你希望這個Thread在執行的時候去計算1加到1000000的數字總合,你就可以在這個Execute的Method內寫一個累加的迴圈來計算結果。所以Execute這個函式可說是整個Thread Object中最主要最精要的函式。,12,33-2.第一個Thread程式,除了預設的程式碼中可以講解的部分外,整個Thread Object中還有一個很重要的Method要介紹,這個就是Thread的建構子。我們呼叫Thr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CBuilder 执行 Multi Thread
链接地址:https://www.31ppt.com/p-6502821.html