看板 Soft_Job 關於我們 聯絡資訊
就我所知, sleep(0) 確實是有特殊意義的 不過,我一直覺得,應該寫成類似 void returnControlBackToOS() { Thread.sleep(0); } public void run(){ while(!progress.isVisible()){ returnControlBackToOS(); } /* .............*/ } ※ 引述《bzan (Oops!)》之銘言: : huh.. 看來這段 code 的原作才是專業哦 : 有興趣的可以寫一個小程式,這個小程式跑兩個 thread : 主 thread 在營幕上列印訊息,另外一個副 thread 則跑類似下面的 code : 你會發現副 thread 有加 sleep 和沒加 sleep 出來的結果可能會不一樣 : 沒加 sleep 的可能會佔掉大部份 CPU 資源,導致主 thread 沒什麼機會執行 : 有加 sleep 則比較可能如預期的,主 thread 不斷列印訊息 : 這是因為如果副 thread 只是單純的做 while() 且中間都是 CPU 運算的 code, : 沒什麼 I/O 控制相關的呼叫,對系統來說反而是 CPU-intensive, 會佔掉大部 : 份的 CPU 資源,進而導致其它 thread 沒機會執行 : 而一般 sleep 函式的設計,除了 delay 外,還會讓出 CPU 控制權給 OS 去做 : context-switching 到其它 thread : 我記得好像 Windows 95 時代還是什麼時候的事了... : 寫一個只做 while(1); 的程式可以佔掉整個系統 99% 的資源而讓系統當機... : 當然這出來的行為一部份也跟 OS 的設計也有關 : ※ 引述《Ting1024 (無)》之銘言: : : 這不好笑阿,,,, sleep(0) or sleep(1) : : 基本上都只是暫時要把控制權給別的程式而已, : : 這樣寫有什麼好笑? : : 在window 下面 sleep(0) 約是 15ms, 控制權交出去 : : 再跑回來, context switch 時間大約就是這樣... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46
visor:其實可以用註解的 05/17 09:43
oaz:個人覺得寫成函數名較好, 因為不可能每次寫 sleep 都註解 05/17 17:11
oaz:再說, 註解可以寫在函式裡 05/17 17:11
sofss:這東西常用在performance critical的地方,多一層不見得好... 05/23 23:49