2012-11-26 78 views
0

我想叫功能每5分钟
我试图C++通话功能每5分钟

AutoFunction(){ 
    cout << "Auto Notice" << endl; 
    Sleep(60000*5); 
} 

while(1){ 

    if(current->tm_hour == StartHour && current->tm_min == StartMinut && current->tm_sec == StartSec){ 
     CallStart(); 
    } 

    AutoFunction(); 
    Sleep(1000); 
} 

我想刷新while每隔1秒,并在同一时间call AutoFunction();每隔5分钟,但没有自动功能

等待Sleep因为我必须刷新,而(1)每1秒,以检查时间启动另一个功能

我认为做这样

while(1){ 

    if(current->tm_hour == StartHour && current->tm_min == StartMinut && current->tm_sec == StartSec){ 
     CallStart(); 
    } 

    Sleep(1000); 
} 
while(1){ 

    AutoFunction(); 
    Sleep(60000*5); 
} 

但我不这么认为两者都将携手

谢谢

+0

听起来像使用线程的好时机。线程永远循环,调用'AutoFunction'并休眠五分钟。同时,线程B永远循环,适当时调用'CallStart'并休眠一秒钟。 – Kevin

+0

看起来像[Boost.Asio](http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio.html1)的定时器之一的完美用例。 [1]: –

回答

1

对于我们这些谁不熟悉THR EADS和Boost库,这可以用一个while循环来完成:

void AutoFunction(){ 
    cout << "Auto Notice" << endl; 
} 

//desired number of seconds between calls to AutoFunction 
int time_between_AutoFunction_calls = 5*60; 

int time_of_last_AutoFunction_call = curTime() - time_between_AutoFunction_calls; 

while(1){ 
    if (should_call_CallStart){ 
     CallStart(); 
    } 

    //has enough time elapsed that we should call AutoFunction? 
    if (curTime() - time_of_last_AutoFunction_call >= time_between_AutoFunction_calls){ 
     time_of_last_AutoFunction_call = curTime(); 
     AutoFunction(); 
    } 
    Sleep(1000); 
} 
在这段代码

curTime是一个功能我做了一个返回Unix时间戳为int。用你选择的时间库中的任何适当的替代品。