我有几个问题,想麻烦大家看看,谢谢!1.我在单文档应用程序中,设定了时间间隔为1秒的定时器,而且有OnTimer函数。
  在调试的时候,我在OnTimer加了断点。
  但是,我发现一个问题:
  我在菜单栏 文件-》打开 开启了自带的“打开”模态对话框,可是却发现,OnTimer函数依然每秒都有响应。
  为什么?2.同步消息 和 异步消息 都是怎么回事?什么差别?

解决方案 »

  1.   

    当然有响应了, 你的单文档应用程序还是在运行的嘛, 只要程序在正常运行OnTimer就有
      

  2.   

    模态对话框也不会停止OnTimer的响应。
    同步就是消息发送方发完消息后,并不立即返回,而是等到对方有响应后才继续;
    异步就是发完消息就拉倒,不管对方收到没有。
      

  3.   

    ls的鹦鹉大哥说的很清楚了,SendMessage()和PostMessage()就相当于LZ所说的同步和异步,SendMessage要等到消息处理完成以后函数才返回,PostMessage()则不是,发完以后立即返回。
      

  4.   

    在MFC程序中,DoModal产生的模态对话框都是假模态。
      

  5.   

    这件事情我以前发帖子讨论过问题不是楼上几位想的那么简单.首先假定消息是一条一条被处理的(线程列的消息循环是这样的)OnTimer相应的是 WM_TIMER 消息楼主所说的 文件->打开 是一个 WM_COMMAND 消息然后楼主的疑问是:既然我在文件打开命令里调用了DoModal这就导致 WM_COMMAND消息的响应函数被 卡死, 该消息响应函数不会返回, 导致线程的消息循环被卡死.那么这个线程的 OnTimer 对应的 WM_TIMER 消息怎么会被处理呢?当时的结论是, DoModal函数里又建立了新的消息循环,不断地处理该线程消息队列里的消息.
      

  6.   

    这个说反了吧?
    SendMessage可理解为等待发送消息执行完返回结果后在执行SendMessage之后的操作
    而PostMessage则是将消息发送到消息队列立即执行PostMessage之后的操作