dポイントプレゼントキャンペーン実施中!

プログラムの実行時間の計測方法について、質問します。

以下に示すプログラムは、パケットが受信される度にmessage関数が呼び出され、message関数内で受信したパケットをfwrite関数を用いて処理をしています。

[質問内容]
clock関数のclock_t型を用いて、プログラムの実行時間を計測したいと思っています。しかし、以下に示すプログラムの場合、パケットが受信されるたびにmessage関数が呼び出され、かつパケットが受信される度にstart = clock()で0秒からの開始になってしまいます。

なにか、対策方法はあるのでしょうか?
よろしくお願いします。

[プログラム]
void main(int argc, char** argv){

//パケットが受信される度にmessage関数が呼ばれる。
message();

}

void message(){
double time;
clock_t start,finish;


if(equals(msg->selector,(byte*)"test",strlen("test"))){
start = clock();
fwrite(msg->payload,msg->payload_length,1,fp);
finish = clock();
time = (double)(finish - start)/1000.0;
printf("データ送信時間:%f[sec]\n",time);
}
else if(equals(msg->selector,(byte*)"finish",strlen("finish"))){
done = D_TRUE;
}

}

A 回答 (1件)

正直何をしたいのかよく分からないんだが・・・・。


とりあえずいっぱいメッセージを受信して、毎回fpに書き込んでいるその差の時間を取っている事は分かる。
つまり、5回受信したらその5回のfwrite時間を合計したいって事かな?
であれば、モジュール(cソースファイル)内に1個変数を作るかstatic変数を作るかで、累積時間を足しこんで行くかして、過去の実績を保存しておく方法が考えられる。

void message(){
double time;
clock_t start,finish;
static double total = 0; /* static変数を作る */

if(equals(msg->selector,(byte*)"test",strlen("test"))){
start = clock();
fwrite(msg->payload,msg->payload_length,1,fp);
finish = clock();
time = (double)(finish - start)/1000.0;
printf("データ送信時間:%f[sec]\n",time); /* ひょっとして累計をこっちに出したいのかな? */
total += time; /* 累計に足しこむ */
}
else if(equals(msg->selector,(byte*)"finish",strlen("finish"))){
done = D_TRUE;
}

この回答への補足

書き込みありがとうございます。
質問の仕方があやふやで、申し訳ありません。

自分が作成したプログラムは、送信側からパケットが来るたびに、受信側のmessage関数が呼び出され、message関数内のfwriteでファイルに書き込んでいます。

今回質問させていただいた内容としまして、受信側の受信開始から終了までの時間(fwriteへの書き込み開始から書き込みが終了するまでの時間)を知りたいと思っています。

しかし、送信側からパケットが来るたびにmessage関数が呼び出されるため、start=clcok()が毎回呼び出されてしまう=0秒のまま、という状態に陥っています。


>printf("データ受信時間:%f[sec]\n",time); /* ひょっとして累計をこっちに出したいのかな? */

はい、そのようにしたいと思っています。

よろしくお願いします。

補足日時:2005/11/21 20:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!