none
在DispatchMessage处崩溃,会是什么引起的? RRS feed

  • 问题

  • Hi,大家好。

    我写的一个程序,在主线程下新建了一个工作线程,工作线程里有一个窗口,工作线程的处理函数如下:

    unsigned __stdcall ThreadFunc( void *param ) { SAComm sa; MSG msg; BOOL bRet; bRet = PeekMessage( &msg, NULL, 0, 0 , PM_NOREMOVE); sa.init(); while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; }

    SAComm即是从ATL基础来的窗口类,现在的问题是我收到的崩溃报告里显示在DispatchMessage处程序崩溃了。开始我怀疑是因为窗口销毁,但是还有消息没有处理的原因,但是看MSDN说窗口销毁后,GetMessage会返回-1,也就是不会进入DispatchMessage分支。那么到底什么情况下会在DispatchMessage处崩溃呢?请各位了解的朋友帮忙解疑。

    2010年12月4日 4:09

答案

  • Hi rancejason,

    欢迎来Microsoft的论坛。

    关于你的程序崩溃的问题,由于一个程序中有多个线程在同时运行,这些线程都有可能访问全局资源(如全局变量),同时,不同线程在执行上还存在一个时序问题,所以谁先发生,谁后发生,都应该统一管理。否则应用程序的运行就很有可能变得不可预测,甚至导致系统崩溃。

    请检查下是否有内存异常。

     

    如果你能提供更详细的信息,你将会得到更有正对性的回答。

    如果你还有什么进一步的问题,请让我知道。

    Lucy

    2010年12月6日 13:06
    版主

全部回复

  • 刚才的帖子没有换行,重发一下。

    我写的一个程序,在主线程下新建了一个工作线程,工作线程里有一个窗口,工作线程的处理函数如下:

     

    unsigned __stdcall ThreadFunc( void *param )
    {
    	SAComm sa;
    	MSG msg;
    	BOOL bRet;
    	while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    	{
    		if (bRet == -1)
    		{
    			// handle the error and possibly exit
    		}
    		else
    		{
    			TranslateMessage(&msg); 
    			DispatchMessage(&msg); 
    		}
    	} 
    	return (int) msg.wParam;
    }
    

    SAComm即是从ATL基础来的窗口类,现在的问题是我收到的崩溃报告里显示在DispatchMessage处程序崩溃了。

    开始我怀疑是因为窗口销毁,但是还有消息没有处理的原因,但是看MSDN说窗口销毁后,GetMessage会返回-1,也就是不会进入

    DispatchMessage分支。那么到底什么情况下会在DispatchMessage处崩溃呢?请各位了解的朋友帮忙解疑。

    2010年12月4日 4:15
  • Hi rancejason,

    欢迎来Microsoft的论坛。

    关于你的程序崩溃的问题,由于一个程序中有多个线程在同时运行,这些线程都有可能访问全局资源(如全局变量),同时,不同线程在执行上还存在一个时序问题,所以谁先发生,谁后发生,都应该统一管理。否则应用程序的运行就很有可能变得不可预测,甚至导致系统崩溃。

    请检查下是否有内存异常。

     

    如果你能提供更详细的信息,你将会得到更有正对性的回答。

    如果你还有什么进一步的问题,请让我知道。

    Lucy

    2010年12月6日 13:06
    版主
  • Hi francejason,

    你的问题解决了吗?如果解决了请把有用的回答标志为答案!

    谢谢

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月13日 8:23
    版主