2012-11-26 81 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。用你選擇的時間庫中的任何適當的替代品。