第5課 執行緒的排程和執行緒的優先順序

2021-08-19 11:41:00 字數 2935 閱讀 7655

執行緒優先順序相同的情況,cpu可以執行乙個執行緒大約20ms。而在系統中的執行緒有不同的優先順序,這將影響排程程式如何選擇下乙個可排程執行緒,系統分配cpu時,會先分配給優先順序高的執行緒。但是高優先順序的不一定是可排程狀態,所以低有先級的也會執行到

系統預設優先級別為0

.版本 2

.dll命令 getcurrentthreadid, 整數型, "kernel32.dll", "getcurrentthreadid", , 獲取當前執行緒乙個唯一的執行緒識別符號

.dll命令 sleep_, 整數型, "kernel32.dll", "sleep", , 用於將執行中的程式暫停(毫秒)

.引數 dwmilliseconds, 整數型, , 要暫停的時間(毫秒),若設為 infinite 那麼就一直等待

.dll命令 waitformultipleobjects, 整數型, "kernel32.dll", "waitformultipleobjects", , 監測乙個物件的狀態,如事件物件,執行緒,程序

.引數 ncount, 整數型, , 物件控制代碼的數量

.引數 lphandle, 整數型, , 指向一組控制代碼的變數

.引數 bwaitall, 邏輯型, , 如果指定為true,函式僅在所有物件的狀態都變成 置位 時才返回 如果指定false ,任意乙個物件的狀態變成 置位 時都返回

.引數 dwmilliseconds, 整數型, , 指定以ms為單位的超時時間

.dll命令 waitforsingleobject, 整數型, "kernel32.dll", "waitforsingleobject", , 監測乙個物件的狀態,如果物件是置位狀態表示就繼續執行此函式下面的程式,如果是復位狀態,就讓下面的程式進入等待狀態. 如事件物件,執行緒,程序

.引數 hhandle, 整數型, , 指定為等待的物件控制代碼(一般就是用 createevent 建立的事件控制代碼)

.引數 dwmilliseconds, 整數型, , 指定以ms為單位的超時時間0為立即返回或infinite(-1)無限等待

.dll命令 getthreadpriority, 整數型, "kernel32", "getthreadpriority", , 獲取執行緒的優先順序

.引數 hthread, 整數型, , 0

.dll命令 resumethread, 整數型, "kernel32.dll", "resumethread", , 啟動被掛起的執行緒,當計數值減到0的時候,執行緒被恢復執行.成功則返回原來的暫停計數值,-1表示失敗。

.引數 hthread, 整數型, , 要啟動的執行緒

.dll命令 setthreadpriority, 邏輯型, "kernel32", "setthreadpriority", , 設定執行緒的優先順序,成功返回非0,失敗返回0

.引數 hthread, 整數型, , 0

.引數 npriority, 整數型, , 0

.dll命令 createthread, 整數型, "kernel32.dll", "createthread", , 建立乙個新的執行緒,建立完畢會立即返回。成功則返回新執行緒的控制代碼,零表示失敗

.引數 lpthreadattributes, 整數型, , 指向乙個security_attributes結構,主要用來指定控制代碼是否可以被繼承,如果讓執行緒使用預設的安全屬性,可以將此值設為 null

.引數 dwstacksize, 整數型, , 執行緒堆疊大小,如果為0,那麼執行緒的堆疊大小和主線程使用的大小相同

.引數 lpstartaddress, 子程式指標, , 執行緒的開始執行位址,指向乙個新執行緒函式(過程)的指標

.引數 lpparameter, 整數型, , 傳遞給自定義引數,傳遞給子執行緒的引數,0為無限止

.引數 dwcreationflags, 整數型, , 設定執行緒被建立後的狀態,如果為0表示,建立後立即執行,如果為create_suspended(4)標誌,表示執行緒被建立後處於掛志狀態,直到使用resumethread函式顯式地啟動執行緒為止

.引數 lpthreadid, 整數型, 傳址, 指向乙個雙位元組變數,用來接收函式返回的執行緒id.執行緒id在系統範圍內是唯一的.

.版本 2

.支援庫 spec

.程式集 程式集1

.子程式 _啟動子程式, 整數型, , 本子程式在程式啟動後最先執行

.區域性變數 hthread1, 整數型

.區域性變數 hthread2, 整數型

.區域性變數 id1, 整數型

.區域性變數 id2, 整數型

hthread1 = createthread (0, 0, &fun_thread, 1, 0, id1)  ' 第5個引數為0 ,建立執行緒後立即執行,

hthread2 = createthread (0, 0, &fun_thread, 2, 4, id2)  ' 第5個引數為4,建立執行緒後掛起等待恢復

除錯輸出 (setthreadpriority (hthread1, 15))  ' 執行緒優先順序高的先執行完成

除錯輸出 (setthreadpriority (hthread2, 2))

除錯輸出 (getthreadpriority (hthread1))

除錯輸出 (getthreadpriority (hthread2))

resumethread (hthread2)  ' 恢復第二條掛起的執行緒

waitforsingleobject (hthread1, -1)

waitforsingleobject (hthread2, -1)

除錯輸出 (「finished!!!」)

返回 (0)  ' 可以根據您的需要返回任意數值

.子程式 fun_thread

.引數 par, 整數型

.區域性變數 i, 整數型

.計次迴圈首 (500, i)

輸出除錯文字 (到文字 (par) + 「|」 + 到文字 (i))

.計次迴圈尾 ()

Java多執行緒 執行緒的排程 優先順序

與執行緒休眠類似,執行緒的優先順序仍然無法保障線程的執行次序。只不過,優先順序高的執行緒獲取cpu資源的概率較大,優先順序低的並非沒機會執行。執行緒的優先順序用1 10之間的整數表示,數值越大優先順序越高,預設的優先順序為5。在乙個執行緒中開啟另外乙個新執行緒,則新開執行緒稱為該執行緒的子執行緒,子...

執行緒的優先順序

執行緒的優先順序告訴程式該執行緒的重要程度有多大。如果有大量程式都被堵塞,都在等候執行,程式會盡可能地執行優先順序的那個程式。但是,這並不表示優先順序較低的執行緒不會執行。若程式的優先順序較低,只不過表示它被允許允許的機會小一些而已。執行緒的優先順序設定可以為1 10的任一數值,thread類中定義...

執行緒的優先順序

首先cpu處理現有執行緒集的順序是不確定的,但是排程器將傾向於讓優先順序最高的執行緒先執行。即執行緒的優先順序仍然無法保障線程的執行次序,只不過,優先順序高的執行緒獲取cpu資源的概率較大,優先順序低的並非沒機會執行。public class prioritiesdemo implements ru...