开机启动加载驱动过程中调用PostMessage函数出错
今天在WINCE5.0+S3C2440系統(tǒng)調(diào)試檢測(cè)出租車是否載客的驅(qū)動(dòng)的時(shí)候遇到這樣的問題:
發(fā)現(xiàn)在開機(jī)啟動(dòng)加載驅(qū)動(dòng)過程中調(diào)用PostMessage函數(shù)時(shí)會(huì)導(dǎo)致調(diào)用的線程崩潰,比如如果下面的線程在創(chuàng)建時(shí)調(diào)用了:
PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 0, 1);//taxi idle
就會(huì)彈出下面的信息:
AKY=00000005 PC=8c2d54fc(NK.EXE+0x000d54fc) RA=8c2c0b38(NK.EXE+0x000c0b38) BVA=00000001 FSR=00000001
?
如果在系統(tǒng)加載完成后再調(diào)用PostMessage函數(shù)就不會(huì)有這個(gè)問題,至于原因目前還不知道,如果知道的朋友,麻煩告知,謝謝。
?
下面是改為中斷檢查的線程Taxi_MonitorThread的實(shí)現(xiàn):
?
DWORD
Taxi_MonitorThread(PVOID pArg)
{
?Taxi_EnableInterrupt();
?gTaxiStatuIntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
?if (!(InterruptInitialize(SYSINTR_TAXI, gTaxiStatuIntrEvent, 0, 0)))
?{
??RETAILMSG(1, (TEXT("::: SYSINTR_POWER Init Fail/r/n")));
?}
?while(1)
?{
??WaitForSingleObject(gTaxiStatuIntrEvent, INFINITE);
??
??if(v_pIOPregs->rGPFDAT&(0x1<<7))
??{
???RETAILMSG(1, (TEXT("taxi idle!/r/n")));
???PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 0, 1);//taxi idle
??}
??else
??{
???RETAILMSG(1, (TEXT("taxi busy!/r/n")));
???PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 1, 1);//taxi busy
??}
??InterruptDone(SYSINTR_POWER);
?}
}
?
解決此問題的帖子http://topic.csdn.net/u/20110325/14/9c29b991-64e1-42a0-b4b3-bafe1241765c.html
總結(jié)
以上是生活随笔為你收集整理的开机启动加载驱动过程中调用PostMessage函数出错的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果C++程序要调用已经被编译后的C函数
- 下一篇: WINCE下SOS驱动开发