8.19.2014

LinuxでもCpp

たいしたことではないんだけどLinuxで時間計測するコードが書きたかった。
WindowsのVCCでは以下のようなのを使っていた。
#include <time .h>
clock_t start, end;
start = clock();
/* 計測対象処理 */
end = clock();
std::cout <<"exit:" << end - start << "ms" << std::endl;
これがLinux用では以下のように書いた。
#include <time .h>
struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC, &start);
/* 計測対象処理 */
clock_gettime(CLOCK_MONOTONIC, &end);

long milliSec = (end.tv_sec*1000 + end.tv_nsec/1000000)
                - (start.tv_sec*1000 + start.tv_nsec/1000000);
std::cout <<"exit:" << milliSec << "ms" << std::endl;
見て分かるようにちょとしたテスト用のコードなので大体の時間が正しく出てれば良し。
Windowsではclock()という関数でlong値(time_t値)で経過ミリ秒が取得されるので何も難しくなかった。
Linuxではclock_gettime()という関数にtimespecという構造体を渡して経過時間をセットする。
timespecではtv_secには秒が入り、tv_nsecにはナノ秒が入る。
よく分かんなかったが、何秒+何ナノ秒というように合算するものらしい(ナノ秒部分は1秒に達すると0に戻る)。
秒は1000を掛け、ナノ秒は下位6桁を切り捨て、足し合わせてミリ秒にしている。
終了時刻から開始時刻を引いて経過時間を出力する。

0 件のコメント:

コメントを投稿