MFC里的OnIdle()

本文详细解析了MFC中CWinThread::Run()函数与OnIdle()的关系,OnIdle()在消息队列为空时被调用,用于处理空闲时间的任务。OnIdle()返回值决定了是否需要更多的空闲处理时间。通过示例展示了如何根据lCount参数执行不同优先级的任务,强调了在OnIdle中不应进行长时间任务,并需确保调用基类的OnIdle实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CWinThread::Run是程序生命的"活水源头"(侯捷:《深入浅出MFC》,函数存在于VC++ 6.0安装目录下提供的THRDCORE.CPP文件中):

 

// main running routine until thread exits
int CWinThread::Run()
{
 
ASSERT_VALID(this);

 
// for tracking the idle time state
 
BOOL bIdle = TRUE;
 
LONG lIdleCount = 0;

 
// acquire and dispatch messages until a WM_QUIT message is received.
 
for (;;)
 
{
  
// phase1: check to see if we can do idle work
  
while (bIdle && !::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE))
  
{
   
// call OnIdle while in bIdle state
   
if (!OnIdle(lIdleCount++))
    
bIdle = FALSE; // assume "no idle" state
  
}

  
// phase2: pump messages while available
  
do
  
{
   
// pump message, but quit on WM_QUIT
   
if (!PumpMessage())
    
return ExitInstance();

   
// reset "no idle" state after pumping "normal" message
   
if (IsIdleMessage(&m_msgCur))
   
{
    
bIdle = TRUE;
    
lIdleCount = 0;
   
}

  
} while (::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE));
 
}
 
ASSERT(FALSE); // not reachable
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值