原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdialog%E4%B8%AD%E4%BD%BF%E7%94%A8settimer%E6%97%A0%E6%95%88

环境VC2008,在文档视图结构中的菜单上加了菜单用于弹出一个派生自CDialog的对话框,响应加到了frame窗口中。     在OnInitDialog中使用SetTimer设置定时器,采用默认响应函数OnTimer。 问题: 1、在菜单的响应函数中使用对话框的DoModal弹出,定时器没有响应,SetTimer的返回值正常,在对话框的PreTranslateMessage函数中发现根本就收不到WM_TIMER消息。 2、将对话框使用Create,ShowWindow的形式创建非模态对话框就可以收到WM_TIMER消息,能够进入到OnTimer中。 百思不得其解!哪位给解释一下,找一下原因??多谢,多谢~~

6个回复
回复1楼 – rxguoblp:当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。
回复2楼 – great_kevin:引用 1 楼 rxguoblp 的回复:

当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。

学习了,以前这点真没注意,也很少用定时器

回复3楼 – great_kevin:引用 1 楼 rxguoblp 的回复:

当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。

并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,?? OnInitDialog时,还没弹出对话框吧?

回复4楼 – ljbsdu:引用 1 楼 rxguoblp 的回复:

当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。

不是你说的那样,我是在对话框中设置的定时器,不是在主程序里,在对话框中加的响应函数OnTimer

回复5楼 – ljbsdu:引用 3 楼 great_kevin 的回复:

引用 1 楼 rxguoblp 的回复: 当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。 并且一旦弹出模态对话框,线程就处于堵……

上面的那位说的不太对,模态对话框和非模块对话框都是创建的新线程,因为CDialog是从CThread继承的,都是开辟的UI线程。弹出模态对话框之后,主程序就不响应了那倒是真的。

求助:对话框下OnInitDialog中使用SetTimer无效的更多相关文章

  1. Delphi TFindDialog TReplaceDialog对话框在Memo中的使用

    Delphi TFindDialog TReplaceDialog对话框的使用 下载地址1: http://download.csdn.net/detail/teststudio/6408383   ...

  2. 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)

    一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...

  3. dos2unix,去掉Linux下文件中的^M

    Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...

  4. js中style.display=""无效的解决方法

    本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...

  5. 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

    选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中 T-SQL核心语句形式: SELECT     --指定要选择的列或行及其限定  [INTO ]      --INTO子句 ...

  6. JS 获取select(多选下拉)中所选值的示例代码

    通过js获取select(多选下拉)中所选值,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  7. 解决Ubuntu下sublime中不能输入中文的问题

    解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...

  8. Android下EditText中的字体不统一问题

    Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看 ...

  9. DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...

随机推荐

  1. 性能调优利器之strace

    最近需要对一个自己开发的socket server的性能进行分析,刚开始还想了好长时间怎么来分析.后来才意识到其实使用strace就足够了. 观察到的现象是server单进程CPU使用率97,但磁盘i ...

  2. 手机号 和 email 的正则匹配

    手机号   /^1[3|4|5|8] \d{9}$/ email  /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/

  3. bind() live()和delegate 区别

    Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置s ...

  4. 解决ecshop登陆自动退出的莫名现象

    最近在做ecshop的二次开发,程序发布后测试出现一个莫名的问题.点击几次页面后出现session丢失,需要重复登陆:本地怎么测试也都无法重现问题.一开始以为是修改程序的问题,可是怎么找都找不着问题所 ...

  5. 向Page对象注册脚本

    在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...

  6. 济南学习 Day2 T2 am

    [问题描述]有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[l,r]中则你比较厉害.求你比较厉害的概率.[输入格式]第一行有三个数N,l,r,含义如上描述.接下来一行有

  7. 第九篇、CSS布局

    <!--css布局 标准流:从上到下 从左到右 脱离标准流:(浮在父控件的最左边或者最右边)(类似ios在window上添加的控件) 1.float: 2.position: absolute( ...

  8. Windows API 之 OpenProcessToken、GetTokenInformation

    The following example uses the OpenProcessToken and GetTokenInformation functions to get the group m ...

  9. iOS开发之UITableView及cell重用

    1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1) ...

  10. passwd命令使用

    2018-03-01  10:01:06 例1:passwd username 直接修改用户的密码普通用户可以且只能修改自己的密码,root用户可以修改任何人的密码[root@localhost ~] ...