0

編集:それは今機能しているようです。コードが更新され、リビジョンが表示されるようになりました。よろしくお願いします。

私はばかげていると思いますが、プログラム全体でCPUティックをカウントするためにctimeを使用しようとしています。私は学校のプロジェクト用の暗号化アルゴリズムを書いています。タイマーを含めて、ノイズプロセスを追加し、さまざまなキーとプレーンテキストの組み合わせの間で時間を均等化できるようにしています。これがctimeのちょっとしたテストです:

#include <iostream>
#include <string>
#include <ctime>

int main (int arc, char **argv)
{
  double elapsedTime;
  const clock_t start = clock ();

  int uselessInt = 0;
  for (int i = 0; i <= 200; i++)
    {
      uselessInt = uselessInt * 2 / 3 + i;
      std::cout << uselessInt << std::endl;
    }

  clock_t end = clock();
  elapsedTime = static_cast<double>(end - start);

  std::cout << elapsedTime << " CPU ticks have elapsed since this application's initiation." << std::endl;
  return (0);
}

印刷するもの:

0
1
2
4
/* ... long list of numbers ... */
591
594
0 CPU ticks have elapsed since this application's initiation.
[smalltock@localhost Desktop]$ 

私はGCC(G ++)を使用していますが、ctime/time.hは単純にティックをカウントしていないようです。誰かが問題を特定できますか?私はこの言語では比較的アマチュアです。

4

2 に答える 2

2

elapsedTimeあなたのプログラムでは、クロックティックの数ではなく、秒単位の時間の尺度です。ティックが必要な場合は、 を使用しますduration

あなたのプログラムは (おそらく) 時間の大部分を I/O でブロックされているため、経過する秒数はそれほど多くありません。

于 2013-03-14T21:47:34.747 に答える
2

私の2セント。cin.get() を実行すると、コンソールに何かが入力されるのを待ちます。何かをしたか、単にエンターを入力しましたか?

テキストを入力せずにコードを実行しましたが、Enter キーを押すだけで、次の出力が得られました。

Test Text
It's a stone, Luigi... you didn't make it.
0 CPU ticks have elapsed since this application's initiation.

Real    0m0.700s
User    0m0.000s
Sys     0m0.061s

CLOCKS_PER_SEC の精度が、プログラムで使用される CPU 時間と比較して「大きい」(秒単位) ためである可能性があります。

一方、期間行の構文エラー、別の ) を見逃したか、最初の ( を削除する必要があります)

ところで: 実際は壁時計時間です。通話の開始から終了までの時間です。

ユーザーは、プロセス内のユーザー モード コード (カーネルの外部) で費やされた CPU 時間の量です。これは、プロセスの実行に使用される実際の CPU 時間のみです。

Sys は、プロセス内のカーネルで費やされた CPU 時間の量です。

したがって、I/O を待機し続けているため、基本的に CPU 時間は 0 であり、CPU 計算はありません。

于 2013-03-14T21:48:58.890 に答える