void CTab1::OnButtonTstart() {...SetTimer(1,1000,NULL);...}
void CTab1::OnTimer(UINT nIDEvent){SendMessage(WM_WORKMSG);}
void CTab1::OnWorkMessage(){
......
......
while(...){
.......
.......
.......
.......
.......
}
}
在void CTab1::OnWorkMessage()中有一个while循环进行业务处理(代码很多)
如果OnWorkMessage()在接受了一个WM_WORKMSG之后开始处理,OnWorkMessage()的while语句在 一秒中内没有处理完
其中的业务,也就是说其while语句没有执行完。那么此时OnTimer(UINT nIDEvent)又发送了一个WM_WORKMSG消息,请问大家OnWorkMessage()会怎么样
进行处理?是先把第一个没有处理完的工作处理完,再来处理第二个的消息;还是中断第一当前的处理,转向来处理第二个消息呢?
请大家指教,并给出说明,非常感谢!
8 个解决方案
#1
先把第一个没有处理完的工作处理完,再来处理第二个的消息。
Timer消息会积压在队列里等待处理
Timer消息会积压在队列里等待处理
#2
虽然我也爱莫能助,还是想问下你 这段代码用在什么系统当中啊,要实现什么样得功能呢
#3
消息会在队列里面排队,一个个执行...
#4
还有WM_TIMER消息,系统为了优化,可能会对队列中的消息进行合并等...
#5
程序在执行OnWorkMessage的时候,(如果该函数中没有执行有关消息处理的代码),OnTimer不会执行。
#6
会在第一个执行完以后再执行第二个,消息会在队列里积压。
#7
消息队列等候.
#8
谢谢大家,我结贴了哈,我明白了
#1
先把第一个没有处理完的工作处理完,再来处理第二个的消息。
Timer消息会积压在队列里等待处理
Timer消息会积压在队列里等待处理
#2
虽然我也爱莫能助,还是想问下你 这段代码用在什么系统当中啊,要实现什么样得功能呢
#3
消息会在队列里面排队,一个个执行...
#4
还有WM_TIMER消息,系统为了优化,可能会对队列中的消息进行合并等...
#5
程序在执行OnWorkMessage的时候,(如果该函数中没有执行有关消息处理的代码),OnTimer不会执行。
#6
会在第一个执行完以后再执行第二个,消息会在队列里积压。
#7
消息队列等候.
#8
谢谢大家,我结贴了哈,我明白了