WinCE7.0_FindWindow函数在线程中调用卡死的现象

遇到一个问题,开发的程序莫名其妙的卡死了!

这个程序是运行在一个大环境中,我的程序并未更新。但从现象上来看,确实是我的程序在接收到UI 通过SendMessage 发来的消息后,在处理中引起卡死的现象。将我的这个程序,放在之前的版本中,就不会出现卡死的问题。

虽然开始怀疑不是自己程序的问题,但还是先从自己的程序入手,希望能找到卡死的原因。最后确定的原因让我吃惊,竟然是FindWindow 函数调用后没有返回,引起卡死的现象出现。

因为在多处增加LOG 输出后,发现有:

start call FindWindow.

输出,但无:

end of call FindWindow. 输出!

查看此处代码,发现自己以前竟然遇到过类似的问题。但是由于另外一句FindWindow 是测试用的,所以当时只是简单的将它注释了,然后写上了注释掉它的原因。如下面的代码所示:

RETAILMSG(1,(L"start call FindWindow.\r\n"));
// hAgent =::FindWindow(NULL,L"TestAppWinName");                  //此句放在线程中引起线程卡死
hClient =::FindWindow(NULL,L"Test2AppWinName");
RETAILMSG(1,(L"end of callFindWindow.\r\n"));

现在的卡死问题的原因下面这句:hClient = ::FindWindow(NULL,L"Test2AppWinName"); 引起的。

 

通过远程工具:Remote Spy 查看出错前与出错后的进程信息,对比发现被查找的窗体的窗体名从:Test2AppWinName 变为空了。

但通过远程工具:Remote Process Viewer 查看进程时,被查找的窗体名是正确的,还是:Test2AppWinName。

在出错后,另写一个简单的程序,通过FindWindow 查找上面的窗体时,可以正确查找到。

 

以下通过远程工具截取的进程与窗体名等相关信息的图片:

1)正确的情况下:

2)错误的情况下:

两幅图最大的区别就在于“Window Property”中的“Window”的内容。

WinCE7.0_FindWindow函数在线程中调用卡死的现象_第1张图片


WinCE7.0_FindWindow函数在线程中调用卡死的现象_第2张图片


其实,问题的原因还没有找到,还需要继续。

后续的分析,见:WinCE7.0_FindWindow函数在线程中调用卡死的现象(2)

你可能感兴趣的:(卡死,FindWindow,WinCE7.0)