2017-03-31 14 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'を呼び戻していますか? 0〜59の値をテストするアクティブなCPUループでは?それは変だ。ヒント:どの関数が '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 */ 
       } 

     } 

私は、時間の経過とともに変化してspecif値を計算維持したいとき、私は個人的に、これを使用しています、だから私は新しく計算された値を決定しなければならなかった。 あなたのニーズに合った方法で少し修正することができます。

また、Windowsのsytemsのwindows.hヘッダーファイルとlinuxのunistd.hに定義されているsleep()関数を使用することもできます。

sleep(1000)はsleep 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; 
} 

プログラムを定期的に実行する場合。それがあなたのオペレーティングシステムの仕事です。お使いのOSでタスクスケジュールを使用してみてください。

関連する問題