C程序在GetMessage中挂起

时间:2014-05-19 09:15:36

标签: c winapi getmessage

我们的程序挂在客户的计算机上(主要在Windows 7中)。

该程序是一个连接到不同计算机上的服务器的客户端。它是一个带有Win32编程图形界面的C程序。

症状: 在随机执行我们的客户端应用程序时,它突然变白并且对话框"应用程序已停止响应"出现,有两个选项:"关闭应用程序","等待应用程序响应"客户电脑说AppHang-B1。

我们无法在我们的系统中重现此问题。但是,一旦我复制了这个问题并进行了崩溃。

调用堆栈说明如下。

0012fa20 76accde0 76ac18d9 0012fcb0 00000000 ntdll!KiFastSystemCallRet
0012fa24 76ac18d9 0012fcb0 00000000 00000000 user32!NtUserGetMessage+0xc
0012fa48 00442dfc 0012fcb0 00000000 00000000 user32!GetMessageA+0x8d
0012fef8 00469b87 00400000 00000000 0334efed OurApp32!WinMain+0x12ec     [e:\mswnt\api55a\OurAppFolder\term\wbtmain.c @ 1350]
0012ff88 7589ee1c 7ffde000 0012ffd4 774237eb OurApp32!__tmainCRTStartup+0x113 [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c @ 263]
0012ff94 774237eb 7ffde000 7eb0a7fe 00000000 kernel32!BaseThreadInitThunk+0xe
0012ffd4 774237be 00469bf2 7ffde000 00000000 ntdll!__RtlUserThreadStart+0x70
0012ffec 00000000 00469bf2 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b

下面崩溃的源代码。请注意,它挂起在GetMessage行。

  /* Handle messages - until were done */
  while (GetMessage(&msg,NULL,0,0)) { /* CRASH POINTS HERE */
     MenuWindow =  GetAccelerators(&msg);
     if (!TranslateAccelerator(MenuWindow.hWnd, MenuWindow.WinAccel, &msg)) {
        if ((MenuWindow.hWnd != 0 && MenuWindow.hWnd != hMainWnd) ||
           !TransmitFromMain(&msg)) { /* Screen to avoid key translation )*/
              TranslateMessage(&msg);    /* Translates virtual key codes    */
              DispatchMessage(&msg);     /* Dispatches message to window    */
        }
     }
  }

来自windbg的局部变量

hInstance   0x00400000 struct HINSTANCE__ * 0012ff00
hPrevInstance   0x00000000 struct HINSTANCE__ * 0012ff04
lpCmdLine   0x0334efed "-dMapper.msf"   0012ff08
nCmdShowz   0n1 0012ff0c
Alertmsg    char [256] ""   0012fdf0
bstatus 0n1 0012fef4
hData   0x045b29c8  0012fbac
hTDC    0xc6013534 struct HDC__ *   0012fccc
   i    0n39    0012fdec
lpCtrlData  0x045b29c8 struct ctrldata *    0012fba8
msg struct tagMSG   0012fcb0
 hwnd   0x001e0fe4 struct HWND__ *  0012fcb0
 message    0x325   0012fcb4
 wParam 0   0012fcb8
 lParam 0n0 0012fcbc
 time   0x9ee0b98   0012fcc0
 pt struct tagPOINT 0012fcc4
MsgHdr  char [256] ""   0012fcd0
scm struct CHARMETRIC   0012fdd4
sectionname char [256] "MPC"    0012fbb0

任何想法为何悬挂?我无法获得有关msg->消息0x325

的任何信息

提前致谢


以下问题的更多信息和答案

感谢您的回复 是的我必须将GetMessage循环更改为

 while ( (ret = GetMessage(&msg,NULL,0,0) != 0 ) {
      if (ret == -1)
      {

我会这样做

@Lundin它不是一个多线程应用程序。

有关Hang的更多信息......当我们将其他应用程序中的Alt Tab添加到我们的客户端时,就会发生Hang。虽然它可能随时发生...... 有关msg 0x325可能是什么的任何见解?

0 个答案:

没有答案