[英]How to use clock() in C++
如何在C++
調用clock()
?
例如,我想測試線性搜索在數組中查找給定元素所需的時間。
#include <iostream>
#include <cstdio>
#include <ctime>
int main() {
std::clock_t start;
double duration;
start = std::clock();
/* Your algorithm here */
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout<<"printf: "<< duration <<'\n';
}
自 C++11 起可用的另一種可移植且精度更高的解決方案是使用std::chrono
。
下面是一個例子:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;
int main()
{
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << "Delta t2-t1: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
<< " nanoseconds" << std::endl;
}
在 ideone.com 上運行它給了我:
Delta t2-t1: 282 nanoseconds
clock()
返回自程序啟動以來的時鍾滴答數。 有一個相關的常量CLOCKS_PER_SEC
,它告訴您一秒內發生了多少個時鍾滴答。 因此,您可以像這樣測試任何操作:
clock_t startTime = clock();
doSomeOperation();
clock_t endTime = clock();
clock_t clockTicksTaken = endTime - startTime;
double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;
至少在 Windows 上,唯一實際准確的測量機制是 QueryPerformanceCounter (QPC)。 的std ::時辰使用它(因為VS2015,如果您使用的),但它是不准確的相同程度直接使用QueryPerformanceCounter的實現。 特別是它聲稱以 1 納秒粒度報告是絕對不正確的。 因此,如果您正在測量需要很短時間的東西(並且您的情況可能就是這樣),那么您應該使用 QPC,或者您的操作系統的等效產品。 我在測量緩存延遲時遇到了這個問題,我在這里記下了一些你可能會覺得有用的筆記; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
#include <iostream>
#include <ctime>
#include <cstdlib> //_sleep() --- just a function that waits a certain amount of milliseconds
using namespace std;
int main()
{
clock_t cl; //initializing a clock type
cl = clock(); //starting time of clock
_sleep(5167); //insert code here
cl = clock() - cl; //end point of clock
_sleep(1000); //testing to see if it actually stops at the end point
cout << cl/(double)CLOCKS_PER_SEC << endl; //prints the determined ticks per second (seconds passed)
return 0;
}
//outputs "5.17"
你可以衡量你的程序運行了多長時間。 以下函數有助於測量自程序啟動以來的 CPU 時間:
我的參考資料:加州大學聖地亞哥分校和國立研究大學高等經濟學院數據結構和算法專業的算法工具箱第 1 周課程部分
所以你可以在你的算法之后添加這行代碼
cout << (double)clock() / CLOCKS_PER_SEC ;
預期輸出:代表clock ticks per second
的輸出
可能您可能對這樣的計時器感興趣:H:M:S。 毫秒
Linux操作系統中的代碼:
#include <iostream>
#include <unistd.h>
using namespace std;
void newline();
int main() {
int msec = 0;
int sec = 0;
int min = 0;
int hr = 0;
//cout << "Press any key to start:";
//char start = _gtech();
for (;;)
{
newline();
if(msec == 1000)
{
++sec;
msec = 0;
}
if(sec == 60)
{
++min;
sec = 0;
}
if(min == 60)
{
++hr;
min = 0;
}
cout << hr << " : " << min << " : " << sec << " . " << msec << endl;
++msec;
usleep(100000);
}
return 0;
}
void newline()
{
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.