对话框显示与消息随笔

  1. 对于一个窗体(包括对话框)来说,它之所以能够显示出来,是因为有一个消息循环负责处理窗体消息,因为有消息循环,所以可以响应用户的输入.
    当一个对话框显示出来后,它自身就有一个消息循环,专门负责对话框的处理,并且也只是针对对话框而言.
    因此主窗体消息循环无法继续进行,它也就是不接受用户的输入,我们称对话框阻塞了主线程.
    而对于一般的框架窗体,它显示之后并没有独立的消息循环,它与主窗体共用一个消息循环,通过这种方式,子窗体也可以响应用户的输入.

  2. 定时器是CPU机制控制的,程序无法控制,你可以理解为一个定时器是一个线程,但它毕竟不是线程.

  3. SetTimer启动了一个性能计数器,平时,当计时器开启的时候,计时器可以响应事件,而用户界面也可以响应。但是程序却只有一个线程。
    CPU不得不分配一个时间片给应用程序专门处理定时器事件,应用程序不能在外面操作定时器。因为定时器处理是由CPU统一处理。
    当窗体处于空闲状态时,GetMessage方法一直得不到返回值,那么应用程序就不会继续执行,当窗体得到焦点后,窗体接受了消息,于是循环继续,
    此时,它就不是阻塞了。应该这么说,主窗体是被对话框中的GetMessage语句阻塞,当程序处于空闲时,主线程就是阻塞,都是对话框的GetMessage语句惹得祸。所以说对话框使得主程序阻塞了。

  4. timer应该是在时钟中断之后执行的,属于在中断上下文中执行的代码段,所以不需要加锁,因为时钟中断本来就是异步,中断返回之后就会搜索timer链表。它是属于软中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值