網上摘抄的,這是給自己看的blog
主程式執行完了,但是不想他退出,有子執行緒要繼續執行
1. while(1) 迴圈,但是會占用cpu資源
一、乙個程序如果是死迴圈,那麼占有的cpu會很高,可以作業系統時間片執行的,到了一定時間不是會自動切換到別的程序嗎?既然即便是死迴圈,到時間還是會切換到別的程序,為什麼占用cpu會高呢?
到時候的確會切換到別的程序。
可以這樣理解:當切換到別的程序時,別的程序告訴系統自己沒什麼事情要做,不需要那麼多的時間,這個時候系統就會切換到下乙個程序,直到回到這個死迴圈的程序上,而這個程序無論什麼時候都再迴圈,所以一直會報告有事情要做,系統就會把盡可能多的時間分給他。
實際上是這個死迴圈任務用光了別的程序節省下來的時間。
(雖然不是很準確,真正的程序排程實現比上面說的複雜得多,不過應該可以解釋你的問題了)
二、之前寫程式的時候一直沒有主動注意cpu占用的問題,今天在進行rtsp服務端測試的時候發現只是接入了一兩個連線,cpu的佔用率已經達到了100%,嚇死我了~雖然之前已經預料到cpu占用會很高,但實際測試結果還是讓我出了一身冷汗,這樣的程式怎麼能夠發布使用呢?應該逐漸關注程式效能演算法優化這方面的問題。當然,導致cpu佔用率如此之高的元凶就是程式中的幾個while(true)死迴圈。
用**解釋如下:
while(true)
改進之後:
while(true)
其實就是新增了一句「sleep(1)」,但是cpu佔用率就直接從100%跌到了1%左右。
sleep()是windowsapi執行緒排程相關的函式,將當前執行緒置入等待狀態,並讓它等待一段指定的時間間隔(以毫秒ms為單位),零值表示放棄該執行緒時限的剩餘部分。
comments:cpu是以納秒級單位運轉的!
windows98 系統是需要加上sleep(x)函式來將控制權交割給其他程序的
至於window的其他系列,就不大清楚如何處理
但是有一點確定,就是你的執行緒中加上sleep函式,的確會減少cpu佔用率,只不過犧牲程式的相應速度
2......還有什麼方法,為了子執行緒不讓主線程退出。求
Windows執行機理 主程式 WinMain
windows執行機理這系列文章都是來至於 零基礎學qt4程式設計 吳迪,個人覺得寫得很好,所以進行了搬運和個人加工 在windows 作業系統下,用c 或者c 來編寫ms dos 應用程式時,最起碼要有乙個main 函式。當使用者執行該應用程式時,作業系統會自動呼叫main。但當編寫windows...
Python模組 以主程式的形式執行
案例 1 1 建立乙個模組,名稱為fun。塊如下 pinetree 我是一棵松樹 定義全域性變數 松樹 def fun christmastree 定義函式 pinetree 掛上彩燈.我變成一棵聖誕樹 定義區域性變數 print pinetree 輸出區域性變數值 函式體外 print 下雪了.p...
超類 子類 主程式執行終極步驟(二)
1 class basetest 213 父類靜態初始 塊 14static 1519 初始化 塊 2024 建構函式 25public basetest 2630 成員方法 31public void callname 3236 37 3839 public class zhuchenxu ext...