关于网友提出的“ 我用多线程来定时,在线程调用函数中循环取得当前时间,检查是否为设定的时间,这样做非常占用CPU资源的,该怎样做好呢?参见贴内代码。”问题疑问,本网通过在网上对“ 我用多线程来定时,在线程调用函数中循环取得当前时间,检查是否为设定的时间,这样做非常占用CPU资源的,该怎样做好呢?参见贴内代码。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 我用多线程来定时,在线程调用函数中循环取得当前时间,检查是否为设定的时间,这样做非常占用CPU资源的,该怎样做好呢?参见贴内代码。
描述: 我用多线程来定时,在线程调用函数中循环取得当前时间,检查是否为设定的时间,这样做非常占用CPU资源的,该怎样做好呢?参见贴内代码。
UINT ThreadFunc1(LPVOID lpParam)
{
threadInfo* pT=(threadInfo*)lpParam;
CTime gt;
int hh,mm,ss;
m_bRun=TRUE;
while(m_bRun){
gt=CTime::GetCurrentTime();
hh=gt.GetHour();
mm=gt.GetMinute();
ss=gt.GetSecond();
if((Info.iH==hh)&&(Info.iM==mm)&&(Info.iS==ss))
m_bRun=FALSE;
}
AfxMessageBox("时间到了!");
}
解决方案1: 先检查小时
if(Info.iH!=hh) 可以等1分钟在检查
小时不同,则不检查info.iM
依次类推.
解决方案2: 既然是在独立的线程中使用定时器,推荐使用WaitableTimer,定时精度很高。
解决方案3: 精确到秒就使用1000毫秒为单位.
解决方案4: 使用TimeSetEvent/timeKillEvent
解决方案5: 加了Sleep就可以了,CPU是其它线程占用的。
解决方案6: 使用Sleep函数,暂停1000MS来执行程序,而且使用Sleep时是将内核切换出去的,使用WaitForSingleObject的话浪费CPU时间
解决方案7: 稍微Sleep一下
以上介绍了“ 我用多线程来定时,在线程调用函数中循环取得当前时间,检查是否为设定的时间,这样做非常占用CPU资源的,该怎样做好呢?参见贴内代码。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3363260.html