WinCE7.0_FindWindow函數(shù)在線程中調(diào)用卡死的現(xiàn)象(2)
上接:WinCE7.0_FindWindow函數(shù)在線程中調(diào)用卡死的現(xiàn)象
/*
?*?對(duì)于同一句FindWindow(NULL,L"TestFindWindow");
?*?在按鍵響應(yīng)中執(zhí)行,耗時(shí)約為: 5ms
?*?在線程中執(zhí)行,由于按鍵響應(yīng)中有?Sleep?存在,耗時(shí)約為: 10020ms
?* Win32 框架下執(zhí)行的結(jié)果與 MFC 相同
?*
?* 按鍵按下響應(yīng)后的執(zhí)行 LOG 如下:
?starttest FindWindow: CSmartDeviceMFCDlg::OnBnClickedButton2
?end of test FindWindow:CSmartDeviceMFCDlg::OnBnClickedButton2,tick: 5
?start test FindWindow:TestFindWindowThreadProc
?Sleep 0
?Sleep 1
?Sleep 2
?Sleep 3
?Sleep 4
?Sleep 5
?Sleep 6
?Sleep 7
?Sleep 8
?Sleep 9
?end of test FindWindow:TestFindWindowThreadProc(10020)
?線程'TestFindWindowThreadProc' (0x45e0336)?已退出,返回值為?0 (0x0)。
*/
DWORDWINAPI?TestFindWindowThreadProc(void?*?pParam)?//?查找Window句柄線程 { ????DWORD?dwTick?=?GetTickCount(); ????printf("rnstart?test?FindWindow:%srn",__FUNCTION__); ????//?在線程中調(diào)用FindWindow,但實(shí)際的執(zhí)行動(dòng)作以SendMessage?方式發(fā)送到窗口進(jìn)程來執(zhí)行(如果主窗體阻塞???) ????//?從此測(cè)試代碼發(fā)現(xiàn),Button?按鍵響應(yīng)中的Sleep?阻塞了?FindWindow?的執(zhí)行;?直接Sleep?結(jié)束才執(zhí)行了?FindWindow?操作 ????FindWindow(NULL,L"TestFindWindow"); ????printf("rnend?of?test?FindWindow:%s(%d)rn",__FUNCTION__,GetTickCount()?-?dwTick); ? ????return?0; } ? voidCSmartDeviceMFCDlg::OnBnClickedButton2() { ????//?TODO:?在此添加控件通知處理程序代碼 ????DWORD?dwTick?=?GetTickCount(); ????printf("rnstart?test?FindWindow:%srn",__FUNCTION__); ????FindWindow(NULL,L"TestFindWindow"); ????printf("rnend?of?test?FindWindow:%s,tick:?%drn",__FUNCTION__,GetTickCount()?-?dwTick); ????CloseHandle(CreateThread(NULL,0,TestFindWindowThreadProc,NULL,0,0)); ? ????for(int?i?=?0;i?<?10;i++) ????{ ???????????Sleep(1000); ???????????printf("Sleep?%drn",i); ????} }