1

私は Windows ユーザーで、C を学んでいます。自宅で Codeblocks と Visual C++ 2008 Express を使用して、単純な C コマンド ライン プログラムを作成しています (私は初心者です)。所要時間の最後 (例: 「プロセスが 0 (0x0) の実行時間を返しました: 6.848 秒」)。

この機能を .exe に追加して、数台のコンピューターでプログラムを「ベンチマーク」または「テスト」できるようにしたいと考えています。time(NULL) を使用してみましたが、1 秒の精度でしか機能しません。

ここでも非常に興味深い回答を見つけました(実際に同じものを探しています):C++コードによる時間の計算

Mark Wilkins によって提案された解決策は、私の Windows 64 ビット PC 上の Visual C++ 2008 Express で正常に動作しますが、.exe は他の場所では動作しません。私は何か間違ったことをしていますか?

プログラムの経過時間をカウントするメソッドが必要です。これには 32 ビット互換性が必要です。前もって感謝します!

4

3 に答える 3

2

time.h ヘッダーに関数があります clock_t clock();

プログラムの起動以降に期限切れになったハードウェア タイマー クロックの数を返します。リアルタイムを取得するには、time.h にも定義されている定数 CLOCKS_PER_SEC でその数を割ります。

完全な方法は次のとおりです。

void print_time_since_launch() {
    printf ("Execution time %f", clock() / CLOCKS_PER_SEC);
}

次のようにプログラムで使用できます。

static clock_t s_start_time;
void start_clock() { s_start_time = clock(); }
void display_execution_time() { 
    clock_t now = clock();
    double secs = (now - s_start_time) / (double)CLOCKS_PER_SEC;
    printf("Execution time: %g secs\n", secs);
}
int main() {
    start_clock();
    /* do your thing */
    display_execution_time();
}
于 2010-04-17T19:28:12.480 に答える
0

一部のPCで動作しない理由は...私の答えを参照してください

最新のPCの内部時計はどのくらい正確ですか?

于 2010-04-17T19:31:20.093 に答える
0
#include <mmsystem.h>

int
main() {
    DWORD start = timeGetTime();
    //Do work
    DWORD end = timeGetTime(); 
    printf("execution time: %.3f s\n", float(end - start) / 1000.0f);
}
于 2010-04-17T20:11:14.123 に答える