1. ホーム
  2. c

[解決済み] time_t をミリ秒に設定する。

2022-02-07 04:09:54

質問

ある関数があり、その関数があるミリ秒間実行されたら、その関数の実行を停止させたいと思っています。この関数は秒単位では動作するのですが、ミリ秒単位でテストしたいのです。どうすればいいのでしょうか?elim = 1とすると、1秒に相当します。elim = 5 ms に設定するにはどうしたらよいでしょうか?

機能です。

void clsfy_proc(S_SNR_TARGET_SET pSonarTargetSet, unsigned char *target_num, time_t eliminate)
{

    // get timing
    time_t _start = time(NULL);
    time_t _end = _start + eliminate;
    int _eliminate = 0;

    //some code

        time_t start = time(NULL);
        time_t end = start + eliminate;

        for(_tidx = 0; _tidx < pSonarTargetSet[_i].num; _tidx++) {
            // check timing
            time_t _current = time(NULL);
            if (_current > _end) {
                printf("clsfy_proc(1), Eliminate due to timeout\n");
                _eliminate = 1;
                break;
            }

            //some code 

        if (_eliminate == 1)
            break;
    }
    //some code 
}

解決方法は?

time_t は絶対時間で、UNIXエポック(1970年1月1日のGMT深夜)からの秒数の整数値で表されます。これは、ある時点の時刻を曖昧さをなくして簡単に表現するのに便利です。

clock_t は時間の相対的な測定値で、ある時点(コンピュータの起動時かもしれないが、頻繁にロールオーバーする可能性があるので保証はない)からの時計の目盛り数の整数値で表される。CLOCKS_PER_SECは1秒あたりのクロックティック数であり、この定数の値はオペレーティングシステムによって異なる場合がある。タイミングをとる目的で使われることもありますが、比較的解像度が低いため、あまり得意ではありません。

の小さな例をひとつ。 clock_t :

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

int main () {
   clock_t start_t, end_t, total_t;
   int i;

   start_t = clock();
   printf("Starting of the program, start_t = %ld\n", start_t);

   for(i=0; i< 10000000; i++) { }

   end_t = clock();
   printf("End of the big loop, end_t = %ld\n", end_t);

   total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
   printf("Total time taken by CPU: %f\n", total_t  );

   return(0);
}