Windows執行緒庫

2021-06-18 03:27:04 字數 2423 閱讀 1985

win32 api是windows作業系統為核心以及應用程式之間提供的介面,將核心提供的功能進行函式封裝,應用程式通過呼叫相關的函式獲得相應的系統功能。

mfc是微軟基礎函式類庫,由微軟提供的,用類庫的方式將win32 api進行封裝,以類的方式開發者。

handle

控制代碼是一種指向指標的指標。指標是一種記憶體位址,應用程式啟動後,組成這個程式的各物件是駐留在記憶體的。如果簡單的理解,似乎我們只要知道這個記憶體的首位址,那就可以隨時用這個位址訪問物件。但是,這個是不正確的。

windows是乙個以虛擬記憶體為基礎的作業系統,在這種作業系統環境下,windows記憶體管理器經常在記憶體中來回移動,以此來滿足各種應用程式的記憶體需要。物件被移動以為著它的位址變化了。如果位址總是如此變化,我們該到**去找該物件呢?!為了解決這個問題,windows系統為各應用程式騰出了一些記憶體儲存位址,用來專門登記各應用物件在記憶體中的位址變化,而這個位址(儲存單元的位置)本身是不變的。在應用程式中使用的變數如指標使用的是相對定址方式,沒有加段位址,使用的是相對於段位址的段偏移;在一些需要被作業系統呼叫、作業系統操作的變數,使用相對位址則會出現很多問題,因為段位址是無法確定的,因此系統就無法準確獲取變數的位址,因此要使用控制代碼。

windows中的控制代碼實際上是乙個唯一的數字,它引用乙個windows物件,例如視窗或圖表等。

windows記憶體管理器在移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存,這樣我們只需要記住這個控制代碼位址就可以間接的知道具體在記憶體中的哪個位置。這個位址是在物件裝載(load)時由系統分配的。當系統解除安裝時(unload)又釋放給系統。

控制代碼位址(穩定)->記載著物件在記憶體中的位址->物件在記憶體中的位址(不穩定)->實際物件

建立執行緒函式:createthread和_beginthread(process.h)

執行緒的掛起與恢復

程序中的每個執行緒都有掛起計數器(suspend count)。當掛起計數器值為0時,執行緒被執行;當掛起計數器值大於0時,排程器不去排程該執行緒。

dword suspendthread(handle);

dword resumethread(handle)。

執行緒睡眠

void winapi sleep(dword dwmiliseconds);

執行緒終結:

void  exitthread(dword);

void _endthread();

void _endthreadex(unsigned retval);

bool winapi terminatethread(handle,dword)

獲取執行緒返回值

bool winapi getexitcodethread(handel);

執行緒的退出:

執行緒退出呼叫函式:

closehandle

執行緒間的通訊:

1,當有多個執行緒訪問共享資源而不希望由於共享使資源遭到破壞時;               執行緒互斥

2,當乙個執行緒需要將某個任務已經完成的情況通知另外乙個或多個執行緒時;   執行緒同步

執行緒間通訊的方法主要包括:

互鎖函式 :函式執行以原子操作方式進行。

臨界段事件

互斥量訊號量

window中的某些核心物件包含著乙個特殊的屬性,用來表示該核心物件是否處於已通知狀態還是未通知狀態。

主要核心物件有:

程序:檔案修改通知

執行緒:事件

作業:可等待定時器

檔案:訊號量

控制台輸入:互斥量

有兩種不同型別的事件物件,一種是人工重置的事件,另一種是自動重置的事件。當人工重置的事件得到通知時,等待該事件的所有執行緒均變為可排程執行緒。當乙個自動重置的事件得到通知時,等待該事件的執行緒中只有乙個執行緒變為可排程執行緒。

排程優先順序

windows 是乙個多工多執行緒作業系統,它採取的排程方法是基於優先順序的時間片輪轉搶占式排程。每個執行緒都會被賦予乙個從0(最低)到 31(最高)的優先順序號碼。

相對高優先順序的執行緒總是被系統優先排程;對於同優先順序的執行緒,系統將對其採取時間片輪轉的排程方式;

對於相對低優先順序的執行緒,則將處於就緒狀態,直到相對高優先順序的執行緒執行完畢。

高優先順序的執行緒可以即時地獲得 cpu,不管正在執行的低優先順序執行緒在做什麼,都將被暫停而讓出 cpu。

Windows執行緒基礎

文章 自 執行緒由兩部分組成 執行緒核心物件和執行緒棧。關於核心物件請看 windows核心物件簡介。執行緒核心物件,作業系統用執行緒核心物件來管理執行緒,作業系統還用它來存放統計資訊。執行緒棧,用於維護執行緒執行時所需的所有函式引數和區域性變數,就是c 程式設計師常說的執行緒棧和託管堆中的執行緒棧...

windows執行緒池

serverdlg.cpp 實現檔案 include stdafx.h include server.h include serverdlg.h include afxdialogex.h include winsock2.h include include include ifdef debug ...

Windows執行緒同步

以下內容摘抄自 visual c 開發技術大全 為學習筆記。執行緒同步的方法有很多,最常用的有 互斥 cmutex 臨界 criticalsection 訊號量 semaphore 事件 event 等。這4種方式分別在 win32 和 mfc 兩種方式下各有一種實現,mfc 方式是對 win32方...