消息处理函数,在接受定时器每隔一段时间发送给它的消息,之后的处理问题

时间:2022-12-31 19:09:10
本人定义了一个定时器,每秒中向消息处理函数void CTab1::OnWorkMessage(),发送消息WM_WORKMSG,之后OnWorkMessage()接收到消息开始工作。
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消息会积压在队列里等待处理

#2


虽然我也爱莫能助,还是想问下你 这段代码用在什么系统当中啊,要实现什么样得功能呢

#3


消息会在队列里面排队,一个个执行...

#4


还有WM_TIMER消息,系统为了优化,可能会对队列中的消息进行合并等...

#5


程序在执行OnWorkMessage的时候,(如果该函数中没有执行有关消息处理的代码),OnTimer不会执行。

#6


会在第一个执行完以后再执行第二个,消息会在队列里积压。

#7


消息队列等候.

#8


谢谢大家,我结贴了哈,我明白了

#1


先把第一个没有处理完的工作处理完,再来处理第二个的消息。

Timer消息会积压在队列里等待处理

#2


虽然我也爱莫能助,还是想问下你 这段代码用在什么系统当中啊,要实现什么样得功能呢

#3


消息会在队列里面排队,一个个执行...

#4


还有WM_TIMER消息,系统为了优化,可能会对队列中的消息进行合并等...

#5


程序在执行OnWorkMessage的时候,(如果该函数中没有执行有关消息处理的代码),OnTimer不会执行。

#6


会在第一个执行完以后再执行第二个,消息会在队列里积压。

#7


消息队列等候.

#8


谢谢大家,我结贴了哈,我明白了