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);
????}
}




