解决方案 »
- 求一段vc6.0连接access的代码
- 图形绘制问题求助
- 请问如何将CFileDialog中的“打开”换成我想要的字符呢
- 这种格式的文件怎么打开呀!!!
- 我要在t1.exe中调用t2.exe,当t2.exe执行的时候t1.exe不能使用,直到t2.exe执行完后才能使用,就象t1.exe调用了自己的一相模态对话框,怎
- 如何拦截NT/2000/XP系统开机时的F8按键?
- 关于文档、视结构
- 向另外程序的发送消息
- 我在测试com时,报错:无法向注册表写入项,请问怎么办?
- HELP~关于Invalidate~
- 如何在不安装access数据库情况下连接到mdb文件?
- 急!为什么我的winio在虚拟机里写端口好用,在真机里写端口就不好用呢?
指的是 MessageBox(...); ????
执行了MessageBox,
然后进入了OnTimer(因为MessageBox内部有消息循环,是有可能响应WM_TIME的),
点击关闭MessageBox,
但MessageBox没有立即关闭(OnTimer还在执行,消息循环阻塞了)
啥样?
必须不是多线程啊.Ontimer单线程也可以实现的
我指的是会不会BTN1Clicked()函数未执行完,就执行OnTimer()函数。如果是这样,我的程序就会发生混乱。另外当我将MessageBox()注释掉时,试了几次,都是执行完BTN1Clicked()函数才会执行OnTimer()的,不知是怎么回事?
啥样?
必须不是多线程啊.Ontimer单线程也可以实现的
Ontimer的实现机制是不是通过开辟一个新线程?
啥样?
必须不是多线程啊.Ontimer单线程也可以实现的
Ontimer的实现机制是不是通过开辟一个新线程?你自己都不知道的事情 也没去验证 就去误人子弟了?
啥样?
必须不是多线程啊.Ontimer单线程也可以实现的
Ontimer的实现机制是不是通过开辟一个新线程?你自己都不知道的事情 也没去验证 就去误人子弟了?
不是有你这样的高人把关嘛,想误导也没得机会啊
啥样?
必须不是多线程啊.Ontimer单线程也可以实现的
Ontimer的实现机制是不是通过开辟一个新线程?我认为不用多线程也可以实现,例如:系统每次getmessage()的时候就作时间判断,如果大于一次间隔时间就插入一个WM_TIMER.MSDN原文:
The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The message is posted by the GetMessage or PeekMessage function.
MSDN上说:这句话的意思是说当应用程序消息队列中没有其他消息时,才会调用OnTimer()吧?也就是在必须是其他的消息响应函数执行完才有可能调用OnTimer()吧?而不可能是例如BTN1Clicked()函数执行一半,转而调用OnTimer()函数?不知我的理解是否正确?
click 消息的 优先度 > timer , 所以 一定是 click 先执行,并要 执行完。
{
CDialog::OnInitDialog();
dosomething;
SetTimer(1,1000*1,NULL);
return TRUE;
}
调试方法上,我就是在BTN1Clicked()函数中设多个断点,其中MessageBox()语句也设断点,单步执行时在OnTimer()函数中的第一条语句上设断点,每次程序执行到MessageBox()处时再按F10,执行OnTimer()的第一条语句,此后如果不删除OnTimer()函数中的断点,则程序始终在OnTimer()中执行,删除OnTimer()中的断点,则执行MessageBox(),即弹出对话框
{
CDialog::OnInitDialog();
dosomething;
SetTimer(1,1000*1,NULL);
return TRUE;
}
调试方法上,我就是在BTN1Clicked()函数中设多个断点,其中MessageBox()语句也设断点,单步执行时在OnTimer()函数中的第一条语句上设断点,每次程序执行到MessageBox()处时再按F10,执行OnTimer()的第一条语句,此后如果不删除OnTimer()函数中的断点,则程序始终在OnTimer()中执行,删除OnTimer()中的断点,则执行MessageBox(),即弹出对话框我擦,版主都来了.
但是如果click中含有MessageBox,它阻塞了父窗口的一些消息,比如说click消息被阻塞了,但是比如说timer消息是没有被阻塞的。这时对于OnTimer来说,没有其他消息,也就可以响应timer消息了。
???
我的理解是messagebox这样的模态对话框,确实中断了父窗口的消息循环(while循环),但是由于messagebox自身也拥有消息队列,所以接管了一部分父窗口的消息来处理.不知这么理解对不对.
我的理解是messagebox这样的模态对话框,确实中断了父窗口的消息循环(while循环),但是由于messagebox自身也拥有消息队列,所以接管了一部分父窗口的消息来处理.不知这么理解对不对.我的描述不太准确.应该是说messagebox接管了消息循环,某些消息被dispatch出来了,有些滤掉了.
谢谢大大
void OnTimer();
//系统调用
int GetMessageFromQueue()
{
//取队列消息
switch(...)
{
case WM_TIMER:
{
OnTimer();
}
}
}