1. 程式人生 > >windows程式設計:多工與多執行緒

windows程式設計:多工與多執行緒

主執行緒處理使用者輸入(和其他訊息),並建立程序中的其他程序,這些附加的執行緒完成與使用者無關的任務。

一個程式中的執行緒是同一程序的不同部分,因此它們共享程序的資源(記憶體、開啟的檔案等),共享靜態變數。而每個執行緒都有自己的堆疊,因此動態變數對每個執行緒是唯一的。每個執行緒還有它自己的處理器狀態,這個狀態在進行執行緒切換期間被儲存和恢復。

建立執行緒: hThread = CreateThread();

hThread = _beginthread();

_endthread();

sleep

臨界區

臨界區是一塊不可中斷的程式碼。

一個臨界區物件:CRITICAL_SECTION型別的全域性變數。如:CRITICAL_SECTION  cs;。這個臨界區物件必須首先被程式中的某個執行緒初始化,通過呼叫InitializeCriticalSection (&cs); 建立一個名為cs的臨界區物件。

進入臨界區:EnterCriticalSection (&cs);此時,執行緒被認為“擁有”臨界區物件。

離開臨界區:LeaveCriticalSection (&cs);

刪除臨界區:DeleteCriticalSection (&cs);

臨界區只能用於在同一個程序內的執行緒之間的協調,要協調兩個不同程序對同一資源的共享,用“互斥物件(mutex object)”技術。

事件物件

在程式的整個生存期內保持執行緒的執行,但是必要時才啟用它。

建立事件物件:hEvent = CreateEvent (&sa, fManual, fInitial, pszName); 事件物件被初始化為有訊號, 就將fInitial設定為FALSE;

置位一個現存的事件物件:SetEvent(hEvent);

復位一個現存的事件物件:ResetEvent(hEvent);

WaitForSingleObject(hEvent, dwTimeOut);

執行緒區域性儲存:

如果需要在一個執行緒內部的各個函式呼叫都能訪問、但其它執行緒不能訪問的變數(被稱為static memory local to a thread 執行緒區域性靜態變數),就需要新的機制來實現。這就是TLS。

閱讀(71) | 評論(0) | 轉發(0) | 給主人留下些什麼吧!~~ 評論熱議