windows的訊息迴圈為什麼不會使cpu的使用率

2025-02-06 07:30:26 字數 4825 閱讀 6753

1樓:網友

不會是因為沒有訊息的時候是不執行的,該執行緒類似在等系統事件。

當然不會佔cpu。

getmessage是個api函式,此函式在發現訊息佇列中沒有任何訊息時會暫停本執行緒,直到再次獲得cpu時間片才continue

2樓:暗黑木匠

關於windows中的系統訊息迴圈佔用cpu的疑問。

getmessage函式是乙個阻塞型的函式,當訊息佇列中沒有訊息時,getmessage會處於阻塞狀態。一旦有訊息到達,程序會被喚醒,getmessage馬上返回。實現時,使用了乙個訊號量, getmessage函式在確定沒有訊息可讀時,對這個訊號量進行乙個v操作,從而使執行緒阻塞。

而postmessage、sendnotifymessage、sendsyncmessage等任何乙個傳送訊息函式在傳送完訊息之後,都會讀取這個訊號量的值,當發現這個值等於零時,即表示讀訊息的執行緒當前已阻塞,這時就會作一次p操作,來喚醒睡眠的執行緒。

雙核四線的cpu,我寫了個死迴圈為什麼不會造成100%的佔用率

3樓:帥哥也有痛苦

您好如果在單任務系統中執行,可以用c語言編寫乙個死迴圈,讓cpu使用率一直保持在100%。

例如:while(true);

注:dos 就是單任務作業系統)

如果在多工系統中執行,則不可能只通過乙個死迴圈就讓cpu使用率一直保持在100%。

除了死迴圈,你還要讓你的程式獲得最高的優先順序。

如果是多處理器環境,你還要啟用多個執行緒來佔用每個處理器。

注:windows 就是多工作業系統)

和 為什麼空迴圈程序會導致cpu佔有率很高

4樓:匿名使用者

具體看是什麼程式了,沒有源虛盯大**很難說的。

其實空迴圈,表面上看好像差豎什麼都沒做,但是翻譯成彙編,其實還有很多計算在裡面……至少判斷是否繼續迴圈就則顫需要計算,不斷的計算當然導致佔用率高。

其實程序只是管理資源的單位,真正執行的是執行緒,如果乙個軟體只有乙個執行緒,在win的情況下,如果執行緒執行空迴圈很多次,會卡組整個軟體,這跟微軟系統的執行緒排程機制有關,大概是優先順序問題,這個就要問微軟了,如果再開乙個執行緒做空迴圈,佔用率就降低很多了……

為什麼電腦什麼都沒開cpu佔用率超高,windows資源管理器佔了40%多?

5樓:育兒小神通

cpu佔有率高,電腦用起來就會很卡。

還原一下系統:使用系統盤修復,開啟命令提示符輸入sfc /scannow 回車(sfc和/之間有乙個空格),插入原裝系統盤修復系統,系統會自動對比修復的。

使用系統自帶的系統還原的方法:「開始」/「程式」/「附件」/「系統工具」/「系統還原」,點選「恢復我的計算機到乙個較早的時間」,按下一步,你會看到日期頁面有深色的日期,那就是還原點,你選擇後,點選下一步還原。

檢視電腦配置是否滿足執行該程式的最低配置,如果確實是電腦配置不行的話,那麼就建議網友將電腦硬體進行公升級了。

cpu使用率其實就是你執行的程式佔用的cpu資源,表示你的機器在某個時間點的執行程式的情況。使用率越高,說明你的機器在這個時間上執行了很多程式,反之較少。使用率的高低與你的cpu強弱有直接關係。

現代分時多工作業系統對 cpu 都是分時間片使用的:比如a程序佔用10ms,然後b程序佔用30ms,然後空閒60ms,再又是a程序佔10ms,b程序佔30ms,空閒60ms;如果在一段時間內都是如此,那麼這段時間內的佔用率為40%。cpu對執行緒的響應並不是連續的,通常會在一段時間後自動中斷執行緒。

未響應的執行緒增加,就會不斷加大cpu的佔用。cpu使用率高的原因有很多,但是一般都是由於病毒木馬或開機啟動項過多所致。高cpu使用率也可能表明應用程式的調整或設計不良。

優化應用程式可以降低cpu的使用率。

死迴圈為什麼會導致cpu的專用率很高

6樓:滴點**

你也說了是死迴圈啊,會一直不停的往復計算進入迴圈,開啟的迴圈越多當然就越卡了。

用c語言編寫乙個死迴圈能讓cpu使用率一直保持100%嗎?

7樓:網友

實際上你寫的這個不是死迴圈,因為i的變化規律為1,2,..max_int,-max_int-1,..1,0,所以最後會結束迴圈的。

第二個問題不知道。

8樓:網友

毒不是這樣寫地。。。

別忘了如果你的程式真的佔100%cpu

而且沒有錯誤處理的話。

它會被windows強行幹掉的。。。

你經常碰到 結束任務。

就是這麼回事。

9樓:羊刀賞金

槽點太多。

編譯器會根據你的**進行優化,空迴圈可能會被直接幹掉如果有作業系統的話,作業系統不會把所有cpu時間給你的程序print這種io操作會被阻塞,在完成之前作業系統會把你掛起如果你真想用cpu煎雞蛋,有幾種方法。

多建立cpu密集型的程序。

在你的**中關閉時鐘中斷然後迴圈,放入作業系統核心,讓作業系統執行它(主要是要取得指令許可權。

直接把作業系統幹掉,讓你的**佔用所有資源。

10樓:網友

同意magipan的看法,死迴圈需要將i++;去掉。

其中這種死迴圈一般不會影響其他程式的執行,因為這只是一種阻塞方式,將處理器的空閒時間片佔滿,當其他程式需要使用處理器時,系統會將時間片分配給這些程式。

想讓系統宕機,可以考慮讓執行的指令數成幾何方式增長。

11樓:一家左

vista 後的作業系統,會因為你cpu的使用率過高,強行中止你的程序。

12樓:網友

不懷好意。。

告訴你把一條計算語句複製許多行。。 然後執行,保證你司機。。。

有沒有軟體可以讓cpu的使用率一直持續在乙個區間內,不要那種一直100%的

13樓:雙魚的涵涵

肯定是沒有的,不然高階u就沒用了。

使用率就是看你cpu的引數以及佔用情況,你玩什麼遊戲? 一直100%的話肯定是你電腦配置不適合玩這個遊戲。 或者加跟記憶體,或者就公升級配置吧。 你是什麼配置?

14樓:網友

沒聽過這種軟體。可能我也是個小白。

15樓:網友

貌似沒有,只能是睿頻監視器,監控你的頻率多少。

這應該是取決與你的操作,待機就10%以下,玩大型遊戲就很高了,其實還跟你的cpu效能有關。

cpu為什麼會有使用率的問題?如果作業系統上只執行乙個程式,cpu使用率為什麼不會是100%?

16樓:網友

要考慮到多核的cpu 有時你乙個程序只有乙個核心在跑, 當然這是廢話。

windows 當然會給你留些資源了。

會有記憶體傳輸速率跟不上cpu的情況嘛。

17樓:匿名使用者

硬體資源要留有閾量,以便響應其它程式。

菜鳥:c 和 windows api 訊息迴圈的問題

18樓:網友

while語句還在監聽訊息嗎???

while呼叫的callback,應該是非同步。

如果又來了乙個事件,那麼,這個程式是不是會 視而不見,沒有任何反應?

留在訊息佇列。

在同一毫秒有成千上萬個事件發生的話,系統不就宕機了?

參見1.我知道可以在 case 裡 建立另乙個執行緒,但建立執行緒也是需要時間的吧,在建立執行緒的時候, 系統不還是宕機嗎?

如果是單核,會是順序執行,由核心排程,不會宕機。

19樓:網友

你的擔心不無道理,在95年以前的windows中是非常容易宕機的。但win95起採用了多種措施避免系統宕機。

windows 95充分利用386處理器的能力,支援兩個特權級。它用0和3兩個特權級管理微處理器,也可稱為兩個環。環0中的部件是作業系統的底層,如包括對低階記憶體儲器管理的支援,環0裡的軟體在整個系統中功能最強,包括了幾乎所有微處理器的指令,並能存取關鍵的資料結構,如頁表等。

因此環0裡的軟體最可靠。

參見系統和應用程式執行在不同的特權級,也是不同的執行緒。即使你的程式停滯,系統仍會將訊息放在你的訊息佇列中。你的訊息迴圈就是從訊息佇列中取出訊息來處理。

我們經常會看到某程式沒有響應,但系統宕機的情況是非常的少了。

20樓:網友

getmessage在訊息列隊中沒有訊息是是阻塞的,也就是沒有訊息的情況下他會通知系統把時間片交給其他程序或執行緒。

21樓:網友

是多執行緒工作,是不會宕機。

22樓:網友

只要case下不是死迴圈是不會出現你所擔心的情況的,懷疑現在cpu的處理速度那是杞人憂天。

23樓:網友

windows在處理訊息時,會使用乙個佇列來存放所有訊息,即訊息佇列。

在執行case語句時,雖然視窗沒有關心訊息佇列,但是如果此時又來了乙個訊息,windows會自動將該訊息放入佇列之中,保證訊息不會丟失。

當case語句處理完畢,視窗再一次執行到getmessage時,會檢視佇列中有沒有未處理的訊息存在,通過這種方式獲取之前發生但還沒有處理的訊息,因此不會出現對訊息視而不見的情況。

24樓:網友

while還在監聽。

換句話說,就不會視而不見。

建立執行緒不會宕機,cpu處理速度是很快的。

為什麼手機發不出短訊息,收不到短訊息

手機傳送不出簡訊,也接收不到簡訊的處理原因及處理方法 手機上面訊號不好。檢查一下手機上面的訊號狀況,如果沒有訊號或者訊號不穩定,那麼就將手機移至訊號好一點的地方 手機上面的安全管家攔截了簡訊傳送和接收。檢查一下手機上面的安全管家軟體,如果存在限制,取消即可 手機系統出現問題。備份手機資料後將手機恢復...

為什麼不回我資訊,為什麼不回我訊息?

說到愛情,我們每個人都非常的期待,因為我們都知道愛情是幸福的,也是非常甜蜜的。正是因為愛情是這樣的幸福和甜蜜。所以我們每個人都非常的期待能夠擁有愛情。尤其是當我們遇到了自己非常喜歡的人,那麼很多人就會更加的用心去關心對方,愛護對方,因為他們知道通過自己的關心和愛護,這樣最終就會讓兩個人能夠擁有屬於自...

什麼是大迴圈小迴圈,汽車的大迴圈和小迴圈是分別是什麼?

1 大迴圈,一般指體迴圈。當心室收縮時,含有較多的氧及營養物質的鮮紅色的血液 動脈血 自左心室輸出,經主動脈及其各級分支,到達全身各部的毛細血管,進行組織內物質交換和氣體交換,血液變成了含有組織代謝產物及較多二氧化碳的略紫色的血液 靜脈血 再經各級靜脈,最後匯入上 下腔靜脈流回右心房。如上路徑的血液...