程序與執行緒的管理

2021-07-04 17:49:32 字數 3797 閱讀 2698

1、程序和執行緒的基本概念:

在計算機系統中,乙個正在執行的應用程式就叫做乙個程序,乙個程序可以有多個執行緒,程序的任務是有這個程序的所有執行緒共同配合來完成的。乙個程序至少有乙個執行緒,叫做主線程。

2、工作執行緒的建立:

如何建立乙個工作執行緒是乙個比較容易的,只要清楚開啟執行緒函式的原型就很簡單了。開啟執行緒的函式是

afxbeginthread,它主要有兩種型別,分別是:

cwinthread*afxbeginthread(afx_threadprocpfnthreadproc,lpvoidpparam,intnpriority=thread_priority_normal,uintnstacksize=0,dworddwcreateflags=0,lpsecurity_attributeslpsecurityattrs=null);

cwinthread*afxbeginthread(cruntimeclass*pthreadclass,intnpriority=thread_priority_normal,uintnstacksize=0,dworddwcreateflags=0,lpsecurity_attributeslpsecurityattrs=null);

第乙個函式可以從引數中看到,只有前兩個引數需要傳遞引數,第乙個引數是pfnthreadproc用來指明被作為執行緒的函式的位址;而第二個引數是需要傳遞給執行緒函式的乙個32為的引數指標,通過該指標可以向執行緒傳遞任何需要的引數。

第二個函式可以從引數中看到,只有前面乙個引數需要傳遞,第乙個引數是乙個類型別的指標pthreadclass,通過 runtime_class 來為執行緒獲取乙個類型別的物件。

了解了開啟執行緒函式的格式之後,就是建立工作執行緒了:通過乙個例子來說明如何建立乙個工作執行緒:

例子:編寫乙個應用程式,當在程式視窗按下滑鼠左鍵的時候,就啟動乙個執行緒,該執行緒在螢幕上顯示乙個資訊框。

實現:(1)用mfc建立乙個單文件應用程式

(2)在試圖類實現檔案(.cpp檔案)中編寫乙個準備作為執行緒的函式

//執行緒函式的實現部分

uint messagethread(lpvoid pparam)

(3)在檢視類的滑鼠左鍵訊息響應函式中建立和開啟執行緒。

void cthreadview::onlbuttondown(uint nflags, cpoint point)

3、使用者介面執行緒的建立

使用者介面執行緒跟工作執行緒的區別是使用者介面執行緒需要建立執行緒的視窗工作介面。於是就應用到建立開始執行緒的第二個函式模型:

cwinthread*afxbeginthread(cruntimeclass*pthreadclass,intnpriority=thread_priority_normal,uintnstacksize=0,dworddwcreateflags=0,lpsecurity_attributeslpsecurityattrs=null);

使用者介面執行緒必須包含有訊息迴圈,一邊可以處理使用者訊息。應該還記得,mfc把程式處理訊息的視窗函式封裝到ccmdtarget類中,而在這個ccmdtarget類的基礎上,又封裝了建立執行緒的一些操作,從而派生出cwinthread類。因此,為了建立可以響應訊息的使用者介面執行緒,在程式設計時,必須要以mfc的cwinthread類為基類派生乙個執行緒類,而且在一般的時候需要重寫類的initinstance()和exitinstance()函式,在initinstance()中標寫執行緒的初始化**(主要是建立視窗),而在exitinstance()函式中編寫撤銷執行緒物件的**。

實現:(1)用mfc建立乙個單文件的應用程式

(2)使用類嚮導以cwinthread類為基類派生cmythread類//這個是用來傳遞到建立開啟執行緒的函式中的引數,同時以cframewnd類為基類派生cmywnd類。//這是為了建立執行緒視窗做準備,即建立自己的執行緒視窗。

(3)在應用程式檢視類的實現檔案中包含標頭檔案

#include「mythread.h」//這是通過基類派生出來的執行緒類的標頭檔案

(4)在cmythread類實現檔案中包含標頭檔案

(5)在cmythread::initinstance()中建立執行緒中的窗體

//利用執行緒類來實現使用者介面多執行緒,主要是在產生執行緒類的同時要建立出相應的使用者介面

bool cmythread::initinstance()

(6)在cmywnd類中宣告滑鼠訊息響應函式,並加以實現,這就是在建立的執行緒視窗當中新增相應的訊息響應函式的過程。

void cmywnd::onlbuttondown(uint nflags, cpoint point)

(7)在應用程式的檢視類當中新增滑鼠訊息響應函式,這個是為了建立和開啟使用者介面執行緒。

//啟動執行緒類

void cthreadclassview::onlbuttondown(uint nflags, cpoint point)

程序管理 執行緒概念

一 執行緒概念 thread 執行緒是可由cpu直接執行的實體 乙個程序內部可建立多個執行緒 多個執行緒共享cpu可以實現併發執行 執行緒的併發程度要比程序更細 windows的createthread 功能 把乙個函式建立為乙個程序 handle createthread lpsecurity a...

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...