![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?c9bd177)
プログラムの実行時間の計測方法について、質問します。
以下に示すプログラムは、パケットが受信される度に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;
}
}
No.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); /* ひょっとして累計をこっちに出したいのかな? */
はい、そのようにしたいと思っています。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
recv関数の戻り値について
-
PC98で232c送信winndowで受信で...
-
TCP/IP のパケットの分断と結合...
-
UDP受信時の通信異常検知について
-
TCPのプログラミングで質問…と...
-
VB2010で、シリアル通信の方法...
-
Perl / IO::Socketによる送受信...
-
MSComm(comEvRing)について教...
-
「TCPは全二重可能」の意味
-
シリアル通信時のデータ受信方法
-
CRC-CCITTに関しての仕様とサン...
-
パソコンに詳しい方教えて下さ...
-
Windows上のファイル操作の履歴...
-
ipadで社内ネットワークに接続
-
java.lang.NumberFormatExcepti...
-
どうしたらいいか教えて下さい。
-
caclsコマンド実行時のサーバ負荷
-
postfixの.forwardでメールの転...
-
visual studio 2008 プロジェク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
シリアル通信時のデータ受信方法
-
TCP/IP のパケットの分断と結合...
-
UDP受信時の通信異常検知について
-
Outlookの「受信日時」「送信者...
-
RS232cを用いた送信プログラム
-
DHCPOFFERの受信について
-
Excxel vba でYahoo API で住所...
-
CRC-CCITTに関しての仕様とサン...
-
recv関数の戻り値について
-
遅延確認応答について教えてく...
-
VC++ 2010 メッセージが文字化...
-
ネットワークでの受信バイト数
-
「TCPは全二重可能」の意味
-
VB2010で、シリアル通信の方法...
-
TCPでパケットロス?
-
赤外線センサーについて
-
C#にてCTI。RS232Cの受信と送信...
-
PC98で232c送信winndowで受信で...
-
パケット受信 recvfrom( )につ...
おすすめ情報