2

整数値が増加しているので、その整数の1秒あたりの平均を求めています。特定の複雑なことをしない限り、タイマーはCには存在しないことを私は知っています[Cは初めてです]これを行うためのより簡単な方法はありますか?このアプリケーションが長時間実行されるので、メモリにそれほど多くの数がないようにするために、計算が行われるときに値がリセットされることが好ましい。

4

2 に答える 2

5

を含めtime.hて、その関数と構造体のいくつかを使用することをお勧めします(これは、実際にはCの基本を学ぶための悪い方法ではありません)。ここに説明といくつかの例があります

1秒未満の精度が必要な場合はclock_gettime()、を使用することをお勧めします。これにより、ナノ秒の解像度が得られます。

次に例を示します。

#include <stdio.h>
#include <time.h>

struct timespec diff(struct timespec start, struct timespec end);

int main()
{
    struct timespec time1, time2, timeDiff;
    int temp, i;

    // Get the start time
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);

    // Do some work
    for (i = 0; i< 242000000; i++)
        temp+=temp;

    // Get the end time
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);

    // Calculate the difference
    timeDiff = diff(time1,time2);

    printf("%d.%d\n", timeDiff.tv_sec, timeDiff.tv_nsec);
    return 0;
}

struct timespec diff(struct timespec start, struct timespec end)
{
    struct timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

次のようなものでコンパイルする必要があります。

gcc -o timetest timetest.c -lrt

コマンドの-lrt一部は、の定義を含むRealtimeライブラリにリンクするようにCリンカに指示しますclock_gettime()

于 2012-12-06T10:24:03.437 に答える
3

gettimeofday()時間値を取得するために使用できます。最新の測定値を古い測定値と比較して、それらの間の時間を把握できるように、そのような測定値を1つ保存する必要があります。これを秒単位で行うと、整数をその間隔で除算して、1秒あたりの平均を取得できます。

于 2012-12-06T10:22:21.407 に答える