thread sleep 函式的用法

2021-06-01 20:04:52 字數 938 閱讀 3244

我寫了乙個大迴圈,開啟了32個執行緒,開始沒有針對內部的迴圈每次做sleep處理,結果很多程序內的操作沒執行完就停止了。加上後就沒這個問題了。

我們可能經常會用到 thread.sleep 函式來使執行緒掛起一段時間。那麼你有沒有正確的理解這個函式的用法呢?

1.thread.sleep(xxxx)函式就是幹這種事的,他告訴作業系統「在未來的多少毫秒內我不參與cpu競爭」。

2.而thread.sleep(0)的作用,就是「觸發作業系統立刻重新進行一次cpu競爭」。

競爭 的結果也許是當前執行緒仍然獲得cpu控制權,也許會換成別的執行緒獲得cpu控制權。這也是我們在大迴圈裡面經

常 會寫一句thread.sleep(0) ,因為這樣就給了其他執行緒比如paint執行緒獲得cpu控制權的權力,這樣介面就不會假死在那裡。

補充: 1.在windows原理層面,cpu競爭都是執行緒級的。

2.作業系統中,cpu競爭有很多種策略。unix系統使用的是時間片演算法,而windows則屬於搶占式的。 在時間  片演算法中,所有的程序排成乙個佇列。作業系統按照他們的順序,給每個程序分配一段時間,即該程序 允許執行的時間。如果在 時間片結束時程序還在執行,則cpu將被剝奪並分配給另乙個程序。如果程序在時間片結束前阻塞或結束,則cpu當即進行切換。排程程 序所要做的就是維護一張就緒程序列表,,當程序用完它的時間片後,它被移到佇列的末尾。 所謂搶占式作業系統,就是說如果乙個程序得到了 cpu 時間,除非它自己放棄使用 cpu ,否則將完全霸佔 cpu 。因此可以看出,在搶 佔式作業系統中,作業系統假設所有的程序都是「人品很好」的,會主動退出 cpu 。 在搶占式作業系統中,假設有若干程序,作業系統會根據他們的優先順序、飢餓時間(已經多長時間沒有使用過 cpu 了),給他們算出一 個總的優先順序來。作業系統就會把 cpu 交給總優先順序最高的這個程序。當程序執行完畢或者自己主動掛起後,作業系統就會重新計算一 次所有程序的總優先順序,然後再挑乙個優先順序最高的把 cpu 控制權交給他。

GetSystemMetrics 函式的用法

可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...

GetSystemMetrics 函式的用法

可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...

GetSystemMetrics 函式的用法

可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...