2017-03-31 91 views
0

我想創建一個每分鐘執行execute_func函數的方法。根據時間執行功能

我試圖環路分鐘,但永遠不會執行的函數,該函數

void main(void) { 
    time_t timer; 
    struct tm* tmr; 

    timer = time(NULL); 
    tmr = localtime(&timer); 

     if (tmr->tm_min == 1) 
      execute_func(); 
    } 
    return; 
} 
+0

你從你的函數調用'main'?在一個活動的CPU循環中測試0到59的值?這很奇怪。提示:哪個函數調用你的'execute_func'?這將是'main',所以你在沒有基本情況的情況下遞歸地調用'main' ... –

+0

在'main'中調用另一個函數的定時更爲常見。 –

+0

'tmr-> tm_min'在0到59之間,爲什麼循環? –

回答

0

在linux系統上,系統調用會很好。這裏是每隔一分鐘之後執行一段代碼或調用函數的一個例子:

while(true) 
    { 
     system("sleep 60s"); 
     computeAFunction(); /* The function that you want to execute after every one minute */ 

     if((true) /* some code that you want to execute */ 
     { 
     exit(0); /* if true exit */ 

       } 
     else 
     { 
      continue; /* or else keep running */ 
       } 

     } 

我曾親自使用這一點,當我想保持計算,用的時間的推移改變特異性值,所以我不得不對新計算的值作出決定。 您可以修改它適合您的需要。

或者,您可以使用windows系統上的windows.h頭文件和linux上的unistd.h中定義的sleep()函數。

睡眠(1000)等於睡眠1s。

0

如何低於你的啓動程序? 我的意思是你的主函數調用execute_func,函數execute_func再次調用main。這太奇怪了。

如果你只是想做一些定期的工作。你可以把這些工作放到另一個沒有主要功能的地方。您可以同時使用任何延遲功能。

void PeriodicJob() 
{ 
    xxx; 
} 

main() 
{ 
    for (;;) 
    { 
    Sleep(60000); // You can use this function on windows platform. Notice that you must include windows.h first. 
    // Or you can write your own delay function too. 
    PeriodicJob(); 
    } 
    return 0; 
} 

如果你想定期運行一個程序。這是你的操作系統的工作。嘗試在您的操作系統上使用任務計劃。