在platform.reg裡對timerout賦值成零,發現生成的登錄檔是更新了,但是值沒有起作用。
在common.reg裡對timerout賦值成零,可以生效。感覺還是很奇怪。
最後再網上查詢了,發現pm正常啟動讀到的是預設值,沒有讀取到登錄檔的值。
說明:wince 的電源管理module就是pm.dll,其**定位在public/common/oak/driver/pm下面。
wince啟動時,pm將在register下讀取使用者設定的timeout vaule(如題),登錄檔位置和我設定的demo值為:
hkey_local_machine/system/currentcontrolset/control/power/timeouts]
"acuseridle"=dword:0a ; in seconds
"acsystemidle"=dword:20 ; in seconds
"acsuspend"=dword:3c ; in seconds
"battuseridle"=dword:0a ; in seconds
"battsystemidle"=dword:20 ; in seconds
"battsuspend"=dword:3c ; in seconds
pm預設的休眠時間為(ac,battery都一樣)
#define def_timeouttouseridle 60 // in seconds, 0 to disable
#define def_timeouttosystemidle 300 // in seconds, 0 to disable
#define def_timeouttosuspend 600 // in seconds, 0 to disable
m_dwacsuspendtimeout = def_timeouttosuspend * 1000;
m_dwactimeouttosystemidle = def_timeouttosystemidle * 1000 ;
m_dwacuseridletimeout = def_timeouttouseridle * 1000;
m_dwbattsuspendtimeout = def_timeouttosuspend * 1000;
m_dwbatttimeouttosystemidle = def_timeouttosystemidle * 1000 ;
m_dwbattuseridletimeout = def_timeouttouseridle * 1000;
在pm裝載時,函式platformloadtimeouts將從登錄檔中得到這個時間。
這裡,pm module存在乙個bug,不管你在 電源=》方案 中設定各種空閒time為多少,重新啟動系統之後,platformloadtimeouts讀取到的是預設值60,300,600。而我們的登錄檔中明明就是我們設定的值啊!
通過將pm porting 到bsp中來編譯,發現在 電源=》方案 設定完成後,pm的platformloadtimeouts重新被呼叫,這樣就有效了,而在os 啟動時platformloadtimeouts
m_dwacsuspendtimeout = regreadstatetimeout(hk, _t("acsuspend"), def_timeouttosuspend);
m_dwactimeouttosystemidle = regreadstatetimeout(hk, _t("acsystemidle"), def_timeouttosystemidle);
m_dwacuseridletimeout = regreadstatetimeout(hk, _t("acuseridle"), def_timeouttouseridle);
m_dwbattsuspendtimeout = regreadstatetimeout(hk, _t("battsuspend"), def_timeouttouseridle);
m_dwbatttimeouttosystemidle = regreadstatetimeout(hk, _t("battsystemidle"), def_timeouttosystemidle);
m_dwbattuseridletimeout = regreadstatetimeout(hk, _t("battuseridle"), def_timeouttosuspend);
返回夜沒有錯誤,確實是60,300,600。查詢發現這時候使用者登錄檔還沒有裝入,其就讀出了預設值。
知道問題的所在,我們只需要在登錄檔裝入之後再invoke 一下platformloadtimeouts就ok了,
跟蹤 platformloadtimeouts的invoke,有pmreloadactivitytimeouts《==pm_reload_activity_timeouts_event 《== m_hevreloadactivitytimeouts 《== _t("powermanager/reloadactivitytimeouts")
我們就可以用 乙個全域性事件名 _t("powermanager/reloadactivitytimeouts") 來在想發起乙個platformloadtimeouts的動作就ok了。將下面的**放入合適的位置
handle hevent = createevent(null, false, false,_t("powermanager/reloadactivitytimeouts"));
if(hevent != null)
wince6 0 電源管理 遇到 問題與解決
1.在做wince6.0 電源管理的時候 無法呼叫到 oempoweroff 這個函式,搞我一天時間沒想到是因為實現xip所以沒呼叫到 先解決方法如下 說起來很簡單吧 因為用的是multi bin,沒有將gwes.dll devmgr.dll servicesenum.dll servicesd.e...
wince 6 0 的編譯錯誤
剛才新增wince6.0 對mfc的支援,只是在platform.bib中增加了幾個mfc相關的dll而已,按照wince5.0 經驗,就是執copy file to release directory就可以了,但是我執行它之後去工程目錄下看並沒有更新platform.bib,不知道咋回事,後來我手...
wince6 0的編譯命令分析
下面從csdn幫助文件簡要說明vs2005下面的系統編譯命令,這些命令位於build advanced build commonds 一共有六條命令,分別是 1.sysgen 2.clean sysgen 3.build and sysgen 4.rebuild and clean sysgen 5...