Qt程式等待 睡眠的正確方法

2021-08-31 11:12:16 字數 855 閱讀 1687

我們在編寫qt程式時經常會遇到這樣的需求: 讓程式等待一段時間, 這段時間裡可能程式什麼都不做, 也可能是在後台開了個子執行緒在做一些使用者看不見的工作。

首先我們容易想到的方法是使用類似linux提供的」sleep」或」usleep」函式。 但用過這組函式的qter都知道, 這組函式會將你當前的執行緒/程序變為「睡眠」狀態。 這個「睡眠」是深度意義的睡眠, 睡眠期間核心不會分配給程式時間片, 所以程式什麼都不做, 更不用提介面的重新整理了。 直接導致的問題就是使用者無法與程式互動。 所以說直接使用sleep函式睡眠是常見的錯誤方案之一。

另外一種更常見的錯誤方法是使用qtimer+死迴圈。 類似下面的**:

qtimer t;

t.start();

while(t.elapsed() < 250);

這個簡單粗暴的解決方案也是行不通的。 從**中我們可以發現在while迴圈中不停的呼叫elapsed()函式, 等於在這段時間內cpu完全沒有機會做別的什麼事情。 特別是在linux這樣非搶占式的作業系統中, 這樣的死迴圈造成的影響是致命的, cpu被完全占用, 核心都沒有機會排程程序, 別的程式拿不到時間片執行, 系統基本上就是癱瘓狀態了。 無論如何, 這種結果都不是我們想要的。(當然拉, 除非你想寫的是病毒程式。) 對於我們的程式本身, 雖然它占用了所有的cpu, 但由於它陷入該迴圈, 程式沒有機會進入到gui事件迴圈, 導致同樣介面是無法重新整理的。

這裡設定程式睡眠一段很短很短的時間, 對於使用者來說是不會有什麼感覺的, 但對核心來說就意義大不同。 這樣核心就有充足的時間排程程序/執行緒, 讓其他程式有機會執行。

這個函式是專為qt測試提供, 所以不建議直接使用在qt程式中。 不過它的基本實現差不多就是我們上面列出的**, 很簡單, copy paste到程式裡用就好了。

Qt程式進入等待睡眠的正確方法

qt程式執行的時候等待一段時間,這段時間裡可能程式什麼都不做,也可能是在後台開了個子執行緒在做一些使用者看不見的工作。當我們使用使用類似linux提供的 sleep 或 usleep 函式時很容易造成使用者無法與程式互動,本文將告訴你乙個正確的方法。51cto編者按 qt框架是symbian應用程式...

Qt程式打包發布方法

qt程式打包發布方法 使用官方提供的windeployqt工具 qt 官方開發環境使用的動態鏈結庫方式,在發布生成的exe程式時,需要複製一大堆 dll,如果自己去複製dll,很可能丟三落四,導致exe在別的電腦裡無法正常執行。因此 qt 官方開發環境裡自帶了乙個工具 windeployqt.exe...

Qt程式打包發布方法

1 qt官方開發環境使用的動態鏈結庫方式,在發布生成exe程式時,需要複製一大堆dll,如果自己去複製dll,很可能丟三落四,導致exe在別的電腦裡無法正常執行,因此qt官方開發環境裡自帶了乙個工具 windeployqt.exe windeployqt工具在 qtdir qt5.9.1 5.9.1...