[英]<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.