win32 消息循环疑惑

原创 2007年10月01日 10:14:00

项目遇到的问题, 解决了但是时间紧张的原因 , 没有仔细考虑

INT WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR strCommandLine, INT )
{
         .
 // 阻塞操作
        WaitForSingleObject( g_Event , INIFINITE );
 SendMessage (g_hMainWnd, WM_MAINXXX, 0, 0);
 .
     MSG  msg;
 while( GetMessage( &msg, NULL, 0, 0 ) )
 {
  TranslateMessage( &msg );
  DispatchMessage( &msg );
 }
 
 return 0;
}

LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT msg, WPARAM w, LPARAM l )
{

 switch(msg)
        {
          case WM_THREADXXX:
           // do -- something           // 没有响应, 接收不到 WorkerThread 线呈发送的消息, 正常
           break;
         
           case WM_MAINXXX:
           // do -- something           // 当 g_Event 事件受信后, 此处可以响应 winmain 的 消息
           break;       
        }


   return DefWindowProc( hwnd, msg, w, l );
}

DWORD WINAPI WorkerThread( PVOID arg )
{

  // 向主窗口线程发送消息, 此时 WinMain 中仍然处于 阻塞状态
  // 如果此处换成 SendMessage, 那就不能返回了,
  PostMessage (g_hMainWnd, WM_THREADXXX, 0,0); 
 
  return 0;
}

由上面的分析我可以得出:
(1)   PostMessage 与 SendMessage 的不同点确实存在.
     PostMessage : 只是把消息放在窗口线呈的消息对列中,不管是否被处理
     SendMessage : 等消息被处理后才返回.

(2)  不能响应 WorkerThread 的 WM_THREADXXX 原因是 WinMain 还有进行消息的派遣和发送

疑惑:
 winmain 中在消息派遣进行之前 发送的消息 WM_MAINXXX 为什么就能得到影响??? 此时也没有进行消息循环。 

Win32消息循环机制等【转载】

Dos的过程驱动与Windows的事件驱动在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别:DOS程序主要使用顺序的,过程驱动的程序设计方法。顺序的,过程驱动的程序有一个明显...
  • u013777351
  • u013777351
  • 2015年10月31日 00:29
  • 3249

windows游戏编程 以PeekMessage为核心的消息循环体系

BOOL PeekMessage( LPMSG IpMsg, HWND hWnd, UINT wMSGfilterMin, UINT wMsgFilterMax, UINT wRemoveM...
  • sinat_24229853
  • sinat_24229853
  • 2015年04月15日 22:49
  • 616

关于windows程序的消息循环

一 消息循环 二 工作线程SendMessage 三: 关于消息响应中创建模态对话框阻塞线程消息循环的问题...
  • haithink
  • haithink
  • 2014年01月21日 11:29
  • 3551

Windows消息循环机制

 理解消息循环和整个消息传送机制对Windows编程来说非常重要。如果对消息处理的整个过程不了解,在windows编程中会遇到很多令人困惑的地方。 什么是消息(Message) 每个...
  • qq_25821067
  • qq_25821067
  • 2015年07月13日 17:25
  • 1445

如何在你的控制台程序里创建消息循环

原文地址:http://wenku.baidu.com/link?url=KXZgTZapJflWV_nvRAZpyGhnTVCrNa2l1Za6mHRnPo-WPhbXVw51H9WuoU6-0K-...
  • bai596140538
  • bai596140538
  • 2016年11月09日 13:45
  • 1475

Win32编程点滴之PreTranslateMessage与消息循环

转自 http://www.cnblogs.com/Greatest/archive/2009/08/25/1553623.html
  • ihc523
  • ihc523
  • 2014年06月07日 10:48
  • 2668

win32多线程-重写消息循环

最近正在学习《win32多线程程序设计》,这是其中一段重写消息循环的代码事例,以后可能用的上。 while (!quit || gNumPrinting > 0) { // Wait...
  • windows_nt
  • windows_nt
  • 2013年07月23日 07:07
  • 2252

为控制台窗口建立消息队列

介绍Windows的窗口、消息、子类化和超类化 (2011-05-08 15:32:07) 转载▼ 标签: 杂谈 分类: windows程序设计 ...
  • coredoor
  • coredoor
  • 2013年02月15日 23:04
  • 6084

win32编程--消息循环

 第五步骤:消息循环在创建窗口、显示窗口、更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应。要从消息队列中取出消息,我们需要调用GetMessage()函数,该函数的原型声...
  • winner0703
  • winner0703
  • 2009年06月23日 11:42
  • 411

NOIP2017小凯的疑惑(提高D1T1)

题面传送门小学奥数题&&结论题给大家一个不太严谨的证明:引用来自 用到一个引理:不定方程ax+by=c(a,b,c>0)ax+by=c(a,b,c\gt0)一定有一组解(x1,y1)(x_1,y_...
  • qwerty1125
  • qwerty1125
  • 2017年11月29日 09:55
  • 386
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:win32 消息循环疑惑
举报原因:
原因补充:

(最多只允许输入30个字)