试验过三种方法:
1. 方法一:? opencv自带
double ss, ee;
ss = (double)cv::getCPUTickCount();
//ss = (double)cv::getTickCount(); //same result
Sleep(10);
cv::waitKey(5);
this_thread::sleep_for(std::chrono::milliseconds(10));
ee = (double)cv::getCPUTickCount();
//ee = (double)cv::getTickCount();
cout << "GetTickCount:" << (ee - ss)/cv::getTickFrequency()*1000 << endl;
printf("read time: %0.2f ms\n", (ee - ss) / cv::getTickFrequency() * 1000);
result:
GetTickCount:25.xxxx
read time: 25.xx ms
2. 方法二: 需要windows.h,不准确
#include <windows.h>
DWORD ss, ee;
ss = GetTickCount();
Sleep(10);
//cv::waitKey(5);
this_thread::sleep_for(std::chrono::milliseconds(10));
ee = GetTickCount();
cout << "GetTickCount:" << (ee - ss) << endl;
printf("read time: %ld ms\n", (ee - ss));
result:
GetTickCount: 16
read time: 16 ms
//不准确
3. 方法三,需要windows.h和 winmm.lib, winmm.dll, 比较准确
DWORD start = timeGetTime();
Sleep(10);
cv::waitKey(10);
this_thread::sleep_for(std::chrono::milliseconds(10));
DWORD end = timeGetTime();
cout << end - start << endl;
printf("read time: %ld ms\n", (end - start));
result:
31
read time: 31 ms
DWORD start = timeGetTime();
Sleep(10);
//cv::waitKey(10); //attention!
this_thread::sleep_for(std::chrono::milliseconds(10));
DWORD end = timeGetTime();
cout << end - start << endl;
printf("read time: %ld ms\n", (end - start));
result:
20
read time: 20 ms
参考:error LNK2001:无法解析的外部符号_imp_timeGetTime@0_草上爬的博客-CSDN博客??????
参考链接:https://msdn.microsoft.com/en-us/library/dd757629
|