簡體   English   中英

<time.h> / <ctime> 沒有計算滴答聲

[英]<time.h> / <ctime> are not counting ticks

編輯:它似乎正在運行。 該代碼已更新以顯示我的修訂。 謝謝大家的幫助。

我想我只是愚蠢,但是我試圖使用ctime來計算整個程序中的CPU節拍數。 我正在為一個學校項目編寫一種加密算法,並且試圖包括一個計時器,以便可以添加噪音處理,以均衡不同鍵/明文組合之間的時間量。 這是對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根本沒有像我希望的那樣計算滴答聲。 誰能找出問題所在? 我是這種語言的相對業余愛好者。

程序中的elapsedTime是以秒為單位的時間量度,而不是時鍾滴答數。 如果您想打勾,請使用duration

由於您的程序(大概)將大部分時間都花在了I / O上,因此不會花費太多時間。

我的兩分錢。 當您執行cin.get()時,它會等待您在控制台上輸入內容,您是否進行了任何操作或只是鍵入enter?

我確實運行了您的代碼而沒有鍵入任何文本,但是只需按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

可能是因為與程序使用的CPU時間相比,CLOCKS_PER_SEC的精度有點“大”(以秒為單位)

同時,持續時間行中出現語法錯誤,您要么錯過了另一個),要么應該刪除第一個(

順便說一句:實際時間是掛鍾時間-從通話開始到結束的時間。

用戶是進程中用戶模式代碼(內核外部)所花費的CPU時間量。 這只是執行過程中使用的實際CPU時間。

Sys是進程中內核花費的CPU時間量。

因此,由於您一直在等待I / O而無需CPU計算,因此您的CPU時間基本上為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM