第七章
執行緒的排程、優先順序和親緣性 隔
20ms
左右,windows
要檢視當前存在的所有執行緒核心物件。在這些物件中,只有某些物件被視為可以排程的物件。
windows
選擇可排程的執行緒核心物件中的乙個,將它載入到
cpu
暫停和恢復執行緒的執行
createprocess
或createthread
函式時,就建立了執行緒的核心物件,並且它的暫停計數被初始化為1。
在暫停狀態中建立乙個執行緒(
create_suspended)
使執行緒成為可排程執行緒,使用以下函式:
dword resumethread(handle hthread)
如果
resumethread
函式執行成功,它將返回執行緒的前乙個暫停計數,否則返回
0xffffffff。
呼叫suspendthread
函式來暫停執行緒的執行:
dword suspendthread(handle hthread);
任何執行緒都可以呼叫該函式來暫停另乙個執行緒的執行(只要擁有執行緒的控制代碼)。
suspendthread
返回的是執行緒的前乙個暫停計數。
suspendthread
與核心方式的執行是非同步進行的
在實際環境中,呼叫
suspendthread
時必須小心,因為不知道暫停執行緒執行時它在進行什麼操作。(比如執行緒試圖從堆疊中分配記憶體,那麼該執行緒將在該堆疊上設定乙個鎖。)只有確切知道目標執行緒是什麼(或者目標執行緒正在做什麼),並且採取強有力的措施來避免因暫停執行緒的執行而帶來的問題或死鎖狀態,suspendthread
才是安全的
睡眠方式
執行緒也能告訴系統,它不想在某個時間段內被排程。這是通過呼叫
sleep
函式來實現的:
void sleep(dworddw milliseconds)
可以將
0傳遞給
sleep
。這將告訴系統,呼叫執行緒將釋放剩餘的時間片,並迫使系統排程另乙個執行緒。
轉換到另乙個執行緒
bool switchtothread()
當呼叫這個函式的時候,系統要檢視是否存在乙個迫切需要
cpu時間的執行緒。如果沒有執行緒迫切需要
cpu時間,
switchtothread
就會立即返回。如果存在乙個迫切需要
cpu時間的執行緒,
switchtothread
就對該執行緒進行排程
執行緒的執行時間
返回執行緒得到的
cpu時間的數量。幸運的是,
windows
提供了乙個稱為
getthreadtimes
的函式
);運用結構環境
環境結構使得系統能夠記住執行緒的狀態
執行緒的優先順序
親緣性可以控制哪個
cpu能夠執行某些執行緒。這稱為硬親緣性
讀書筆記 Windows核心程式設計
第二章 從windows nt後,windows所有版本都用unicode來構建。如果輸入乙個非unicom的字串,如ansi,函式會將其先轉換為unicode,再把結果傳回作業系統,這樣經過轉換後,需要更多的記憶體,而且執行速度更慢。並且,目前已知的windows的這些轉換函式存在一些bug。所有...
《Windows核心程式設計》讀書筆記(一)
第1章對程式錯誤的處理 1 常見的windows函式的返回型別 void 無返回值型,該函式的執行不可能失敗。windows函式很少此型別 bool 函式執行失敗則返回0,否則返回非0 handle 失敗則返回null,否則返回乙個可操作的物件的handle。注 有些函式會返回乙個控制代碼值inva...
《Windows核心程式設計》讀書筆記(三)
unicode 寬位元組字符集是是為了解決軟體本地化 多語言版本化 而定製的一項技術標準。unicode字串中的所有字元都是16位的 兩個位元組 程式設計師只需要對指標進行遞增或者遞減,就可以遍歷字串中的各個字元,不在需要像單位元組字元一樣去判斷下一位元組是屬於同一字元的組成部分還是乙個新字元。使用...