為什麼CVI應用程式會佔用很多的處理器資源?



主要軟體: LabWindows/CVI Development Systems>>Full Development System
主要軟體版本: 8.0
主要軟體修正版本:
次要軟體: N/A

問題: 在執行CVI的人機介面的時候,如果我在介面上移動滑鼠,CPU的使用率就變為100%。這種情況甚至發生在我只是移動滑鼠而沒有點擊任何東西的時候。這究竟是為什麼,我又如何能降低CPU的使用率呢? 

解答: 當程式運行在RunUserInterface()函數中時,CVI的run-time Engine被放在一個連續的迴圈中,以等待系統事件。為了維持狀態有效,CVI需要處理並分派這些事件。每次在這個迴圈中,CVI的run-time Engine會根據使用者的休眠策略進入休眠狀態。雖然休眠越多,資源消耗越小,但是這個迴圈也在消耗CPU資源。此外,我們接收到的事件越多,CPU的資源也消耗越多(滑鼠移動時CPU使用增加)。

因此為了降低CPU使用的一種辦法就是讓原本的休眠改為"更多休眠"。在主函式裡,RunUserInterface的函式前面,使用函式SetSleepPolicy來實現"更多休眠",以降低程式檢查人機介面事件的頻率,但是後臺操作仍然以相同的速率運行。這一選項在CVI 5.0以及更高的版本都設置為預設值。

另外一個降低CPU使用率的方法,就是在while迴圈中不採用RunUserInterface(),而是用ProcessSystemEvents()。當你用ProcessSystemEvents()函數,CVI執行一個相對來說較少的遞迴(iteration)固定次數,同時它也會根據休眠策略休眠。換句話說,這個方法將耗費更少的時間,並且對休眠策略更加敏感。ProcessSystemEvents和RunUserInterface最主要的不同就在於RunUserInterface對系統事件發生的次數比較敏感。所以

#include <windows.h> // for the Sleep function

int gQuit = 0; // set this global flag when calling QuitUserInterface()

while (!gQuit)
{
      ProcessSystemEvents();
      Sleep (10);
}


這將有助於明顯降低CPU使用率。

有時候為了要降低CPU使用率的資源會注意到的主題還有:

CVI在事件處理上比較獨特,這使得它"看起來佔用"大量的CPU資源。不幸的是,這是軟體的核心設計部分,不可能輕而易舉就作出修改。這主要是一個感覺上的問題。如果其他處理程序不需要CPU資源,而我們的程式獲得了控制權,則CPU資源佔用率的提高是很正常的。

相關連結: KnowledgeBase 2CQDSTA6: Improving Performance of LabWindows/CVI Applications

附加檔案:





報告日期: 06/30/1997
最後更新: 12/11/2007
文件偏號: 0YTBPJQL