zoukankan      html  css  js  c++  java
  • GetMessage的第二个参数

    疑问

    为什么GetMessage的第二个参数制定为hwnd后,应用程序无法退出?

    解释

    MSDN中指出:

    当第二个参数为NULL时,GetMessage取得那些属于调用线程的窗口的消息和通过PostThreadMessage函数投递到调用线程的线程消息。

    GetMessage需要检索到WM_QUIT返回一个FALSE结束消息循环, 而WM_QUIT是通过PostQuitMessage发送, 属于线程消息, 而非普通的窗口消息。

    如果在GetMessage中用hWnd而不是NULL, 虽然WM_QUIT 消息仍会出现在程序的消息队列中,但GetMessage却无法检索到, 而且此时窗口已经被销毁了, 如果还

    想取得hWnd的窗口消息, 只可能发生错误(GetMessage返回-1,而不是0)

    建议

    1)第二个参数设为NULL

    2)写成 

     1 BOOL bRet;
     2 while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
     3 {
     4    if (bRet == -1)
     5    {
     6       // handle the error and possibly exit
     7    }
     8    else
     9    {
    10       TranslateMessage(&msg);
    11       DispatchMessage(&msg);
    12    }
    13 }
    View Code
  • 相关阅读:
    NIO简述
    函数式编程
    ReadWriterLock读写锁
    Semaphore工具类使用
    CyclicBarrier工具类使用
    CountDownLatch工具类使用
    创建VUE+Element-UI项目
    <slot>插板使用
    Spring面试题
    实现定时任务的几种方式
  • 原文地址:https://www.cnblogs.com/TaoyzDream/p/3698661.html
Copyright © 2011-2022 走看看