-1

C で時間間隔を定義したい。
たとえば、20 秒ごとにタスクを実行したい。以下のコードはこのタスクに適していますか?

明確にするために、私たちの目標は時間間隔で機能します。たとえば、20 秒ごとにパケットを読み取り、各間隔の終わりにいくつかのパラメーターを変更したいとします。

double blocktime = 20.000000;
clock_t current, next;

current = clock();
    while(trace_read_packet(trace,packet)> 0 ){
        //doing some tasks
        next = clock(); 
        if ((double((next - current) / CLOCKS_PER_SEC))== blocktime) // if it is end of the  interval do some tasks
        {
                          //doing some task
            current = next;

        }
    }//end of while

およびその他の質問は、時間で機能するループをどのように定義できますか?

4

2 に答える 2

2

このような場合は、できる限り使用==しないでください。あなたは失敗する準備をしています。なんらかの理由でコードが遅くなり、20 で完全にヒットしない場合は、失敗し、タスクを実行することはできません。

「ミスを想定」して、次のようにする必要があります。

if ((double((next - current) / CLOCKS_PER_SEC))>= blocktime) 

はい、next-current を CLOCKS_PER_SEC で割ると、CPU 使用時間が得られます。睡眠に費やした時間を報告しないため、CPU 使用時間と言うことに注意してください。そのため、コードで呼び出しを使用する場合、これは正確ではありません。それ以外の場合、このコードは、実行しようとしているものに十分近いはずです。clock()sleep()//doing some tasks

于 2013-04-04T15:21:55.787 に答える