virtual boolonidle( long lcount );
返回值:
如果要接收更多的空閒處理時間,則返回非零值;如果不需要更多的空閒時間則返回0。
引數:
lcount 該引數是乙個計數值,當應用程式的訊息隊列為空,onidle函式被呼叫時,該計數值就增加1。
每當一條新訊息被處理時,該計數值就被復位為0。你可以使用lcount引數來確定應用程式不處理訊息時空閒時間的相對長度。
說明:
如果忘掉了的話,你會發現一些mfc的ui會出現問題,比如選單上的選擇狀態無法更新等問題。
下面總結了空閒迴圈處理:
1、如果微軟基礎類庫中的訊息迴圈檢查訊息佇列並發現沒有未被處理的訊息,它就為應用程式物件呼叫onidle函式,並將lcount引數設為0。
2、onidle執行一些處理,然後返回乙個非零值,表示它還需要被呼叫,以進行進一步處理。
3、訊息迴圈再次檢查訊息佇列。如果沒有未處理的訊息,則再次呼叫onidle,增加lcount引數。
4、最後,onidle結束所有的空閒任務並返回0。
這就告訴訊息迴圈停止呼叫onidle直到在訊息佇列中接收到下一條訊息為止,在那時,空閒迴圈將重新啟動,而引數被設為0。
因為只有在onidle返回之後應用程式才能處理使用者輸入,因此在onidle中不應進行較長的任務。
示例:
下面的兩個例子演示了onidle的用法。
第乙個例子處理兩個空閒任務,用lcount引數來排列這些任務的優先權。
第乙個任務優先權較高,一旦可能你就應當執行此任務。第二個任務不十分重要,只有當使用者輸入有乙個較長時間的間歇的時候才應執行此任務。
注意其中對基類的onidle的呼叫。
第二個例子管理著一組具有不同優先權的空閒任務。
else if (lcount == 10)
else if (lcount == 100)
else if (lcount == 1000)
return bmore; // 返回true,只要還有其它空閒任務}
第二個示例:
// 在這個例子中,有四個空閒迴圈任務,它們被賦予
// 不同的優先權,執行的機會不同:
// task1在空閒時總能執行,要求在框架處理它自己的空閒迴圈任務時沒有訊息在等候。(lcount為0或1)
// task2 僅當task1以及執行時才能執行,要求當task1執行時沒有訊息在等候。
// task3和task4僅當task1和task2都執行之後才能執行,
// 並且在此期間沒有訊息在等候。如果task3能夠執行,
// 則task4總是在task3之後立即執行。
// 過程之前完成它的處理。
// 空閒處理使用。如果你希望與框架平等地共享空閒處理
// 然後為lcount的值0和/或1加入乙個case語句。首先應當研
// 究基類的實現以理解你的空閒迴圈任務將會如何與框架的
// 空閒迴圈處理競爭。
switch (lcount)
return false;
}///注意
在vc基於對話方塊程式中,似乎不能使用onidle。從網上查了一下,可以用wm_kickidle訊息實現相同功能。wm_kickidle訊息響應需要自己手動新增**。下面是步驟:
1.mydlg.cpp檔案新增包含:
#include
2.mydlg.**件新增宣告
afx_msg lresult onkickidle(wparam wparam, lparam lparam);
3.mydlg.cpp檔案新增訊息對映:
on_message(wm_kickidle,onkickidle)
4.mydlg.cpp新增函式的實現:
lresult cmydlg::onkickidle(wparam wparam, lparam lparam)
重寫 onidle 以執行後台任務。預設版本更新使用者介面物件(如工具欄按鈕)的狀態,並對框架在操作期間建立的臨時物件執行清理工作。下面闡釋了在佇列中沒有任何訊息時訊息迴圈呼叫 onidle 的方式。
intposted @cwinthread::run()
}......
//msg loop}
}
2019-01-06 11:46
ye_ming 閱讀(
...)
編輯收藏
FreeRtos 空閒任務與空閒任務鉤子函式
以下基礎知識 自正點原子pdf資料。前面例子中建立的任務大部份時間都處於阻塞態。這種狀態下所有的任務都不可執行,所以也不能被排程器選中。但處理器總是需要 來執行 所以至少要有乙個任務處於執行態。為了保證這 一點,當呼叫 vtaskstartscheduler 時,排程器會自動建立乙個空閒任務。空閒任...
空閒記憶體管理
學習自 現代作業系統 作業系統在動態分配記憶體時 malloc,new 需要對空間記憶體進行管理。一般採用了兩種方式 點陣圖和空間鍊錶。1 使用點陣圖的儲存管理 記憶體被劃分為若干個幾位元組大小的分配單元,每個分配單元是否是空閒的情況採用點陣圖來進行描述,如果已分配,相應位置1,未分配,置0。當需要...
FreeRTOS空閒任務
空閒任務在啟動排程器的時候被建立 啟動排程器 void vtaskstartscheduler void else endif if xreturn pdpass else else 空閒任務的作用包括 保證系統至少有乙個任務在執行 檢查等待終結列表中是否有任務並釋放它們。空閒任務 static p...