• ベストアンサー

プログラムの実行時間

Cで書いたのプログラムの時間を測りたいのですが、 何か良い方法はありますか?? 調べたところclock関数というのがあるそうですが「処理系の最良の近似で返す」ってどうなんだろうと思って聞いてみました。 何が必要か良くわからないのですが、Windouws XPでコンパイラはBorland C++を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★外部プログラムを測定したいのですか? ・それとも C で書いた処理ルーチンを測定したいのですか?  どちらにしても clock 関数で簡単に測定できます。  次のサイトを参考にして下さい。  http://www9.plala.or.jp/sgwr-t/lib/clock.html→『プログラム実行開始からの経過時間(プロセッサ時間)を取得する』  多分、上記のようなサイトを読んだのでしょうね。 ・clock 関数は処理系によって測定できる分解能が異なるのです。  処理系A では、1秒単位で測定できるが、  処理系B では、1/1000秒単位で測定できる場合があります。  『理系の最良の近似で返す』ってこの事だと思います。 ・あと Windows API に GetTickCount() という関数がありますが、この関数は 1ミリ秒単位で  Windows システムの起動経過時間を取得できます。この関数を利用すれば、C関数の clock  よりも分解能が細かいため精度が良くなります。  下のそのサンプルを載せます。 サンプル: #include <stdio.h> #include <windows.h> int main( void ) {  DWORD dwStart;  DWORD dwStop;  DWORD dwTime;    dwStart = GetTickCount();  /*  処理ルーチン(測定したい関数など)  */  dwStop = GetTickCount();  dwTime = dwStop - dwStart;    printf( "計測時間は %d.%03d 秒でした。\n", (dwTime / 1000), (dwTime % 1000) );  return( 0 ); } その他: ・外部プログラムの測定は、上記の処理ルーチンに system 関数で外部プログラムを  実行すればよいだけです。   :  dwStart = GetTickCount();  system( "c:\program.exe" );  dwStop = GetTickCount();  dwTime = dwStop - dwStart;   :  とします。 ・以上。参考に。

参考URL:
http://www.sm.rim.or.jp/~shishido/tick.html,http://www.emit.jp/prog/prog_t1.html
apple_cube
質問者

お礼

大丈夫なんですねっ! clock関数をも使うことが出来ました。 ありがとうございます(^_^)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムの実行時間計測方法について

    プログラムの実行時間の計測方法について、質問します。 以下に示すプログラムは、パケットが受信される度に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; } }

  • プログラムの実行がうまくいかない。

    下記のアドレスのプログラムを実行したら、 http://www.winsock2.org./samples/Ch05/Ping/Ping.c 「Usage:ping hostname」 と表示されてうまくいきません。 プログラム内のどこか変える必要があるのでしょうか? お願いします。m(__)m OSはWindows XPでコンパイラは、ボーランドのフリーコンパイラを使用しています。

  • C言語でプロセスを処理するプログラムを考えています。

    C言語でプロセスを処理するプログラムを考えています。 popenを使ってプロセスを起動しようとしたですが、popenが未定義の関数とエラーが出てコンパイルできません。 ヘッダにstdio.hはおいてあります。 コンパイラはborlandを使用しています。 よろしくお願いします。

  • 一定周期実行プログラム

    UNIX環境での、プログラムを一定周期実行させるプログラミング方法についてご教授下さい。 例えば、50msの周期で、無限ループするプログラムです。 while(1) { t1=clock(); (処理1); t2=clock(); passtime=(t2-t1)/CLOCKS_PER_SEC; time=0.05-passtime; tmp=(int)(1000000*time); usleep(tmp); } まず、思い付いたプログラムは、処理1に掛かった時間を計算し、50msから処理に掛かった時間を引いた時間をsleepで待たせるプログラムです。clock()は精度が低いようですが・・・他に何かいい方法はないでしょうか?

  • バックグラウンドで実行されるプログラムを作るには?

    バックグラウンドで実行されるプログラムを作るにはどうすればよいのですか? あと自分自身へのリンクを自動で作成するにはどうすればいいのですか? win xp borland c++です。

  • プログラムの実行を中断

    標準ライブラリにプログラムを指定した時間だけ停止する、というような関数はあるでしょうか? 自分でも似たような関数を作ったのですが、負荷が大きいらしく動作が指定した時間よりも遅れてしまうことがあります。 #include <ctime> void sleep(int time) { tm *present; time_t clock; int begin; time(&clock); present=localtime(&clock); begin=present->tm_sec while(begin!=present->tm_sec-time){ time(&clock); present=localtime(&clock); } return; }

  • C++プログラムにおけるexeファイルサイズ

     borland C++でプログラムを記述し、コンパイルするとexeファイルサイズがソースのそれの約100倍に増えます。  これを低減する方法を教示ください?  gcc、g++、vccなど各種コンパイラによって異なるそうですが。

  • windowsプログラムのヘッダーについて

    SDKを用いてWindowsプログラムを作っています。 #include <ctime> とインクルードした上でclock()関数を使用したのですが、コンパイラから未定義の関数を呼び出したことになってエラーが出てしまいます。他のヘッダーも含めC++の標準ライブラリはインクルードできないのでしょうか? ちなみに、<time.h>でインクルードすればコンパイルできます。

  • プログラム領域の算出方法

    現在C言語でプログラミングの勉強(設計含む)をしているのですが、設計書の記載項目に「プログラム領域」「ヒープ領域」「スタック領域」の算出を関数ごとに行うというような記述がありました。 動的メモリ領域・スタック領域の算出方法は何とか調べたのですが、「プログラム領域」の算出方法がわかりません! 出来れば 1.プログラム全体のプログラム領域の算出方法 2.関数ごとのプログラム領域の算出方法 を教えて頂けないでしょうか? 勉強している環境 OS:WindowsXP コンパイラ:Borland C++ Compiler 5.5 よろしくお願い致します。

  • プログラムがうまく実行できません。

    下にソースを載せたのですが、このプログラムがうまく実行できません。 OSはWin XPでコンパイラはボーランドのフリーコンパイラを利用しています。 #include<stdio.h> #include<math.h> int main() { double a,b,c,d,e,p; a=-1.43; b=1.43; c=-4.29; d=1.72; e=2.43; fot (p=0; p<1; p=p+0.0001){ printf("(%1.5f*pow(p,2)+%1.5f)/(%1.5%f*pow(p,2)+%1.5f*p+%1.5f,\n",a,b,c,d,e); } return 0; } (変えたい内容) pの値が0<p<1の範囲で、0.0001から0.0001ずつ増して行き、0.9999まで繰り返し処理して、1回ずつの値を出力したいのですが、うまくいきません。