我有下面的代码在qnx momemntics上运行。
#define BILLION 1000000000L;
struct timespec start_time;
struct timespec stop_time;
void start MyTestFunc() {
//Initialize the Test Start time
clock_gettime(CLOCK_REALTIME,&start_time)
// ... additonal code.
cout << "The exectuion time of func "<< calculateExecutionTime();
}
double calculateExecutionTime ()
{
clock_gettime(CLOCK_REALTIME,&stop_time);
double dSeconds = (stop_time.tv_sec - start_time.tv_sec);
double dNanoSeconds = (double)( stop_time.tv_nsec - start_time.tv_nsec ) / BILLION;
return dSeconds + dNanoSeconds;
}
现在我想把上面的代码移植到windows上。有谁能提供示例代码吗?
谢谢你!
6条答案
按热度按时间g6ll5ycj1#
您可以为窗口实现clock_gettime()替换,如下所示:
a1o7rhls2#
避免PerformanceCounter混乱,简单代码:
...是快速、可靠和正确的移植解决方案,具有令人印象深刻的100 ns精度(1 ms/10000)。
基于QPC的解决方案,其精度可能(在某些硬件上)甚至更好:
tyu7yeag3#
我使用
QueryPerformanceCounter()
的clock_gettime()
的 * 改进 * 版本。我认为我的版本比目前使用
QueryPerformanceCounter()
的公认答案有所改进,因为-1.更可靠-检查函数的返回值,以及按引用传递变量中返回的值。
1.更稳健-检查输入参数的有效性。
1.更精简-使用尽可能少的变量数量(3 vs 7)。
1.更加简化-避免了涉及
GetSystemTimeAsFileTime()
的代码路径,因为QueryPerformanceFrequency()和QueryPerformanceCounter()可以保证 * 在运行Windows XP或更高版本 * 的系统上工作。9fkzdhlc4#
clock_gettime()
的一个完整功能和完整测试的实现已经在mingw-w 64中使用了很多年了。(在Windows上)。如果你正在编写一个在Linux和Windows之间可移植的代码库,并且你找不到clock_gettime()在<time.h>
中,我建议您尝试使用#include <pthread_time.h>
,使用-pthread
进行编译,或者使用-lrt
进行链接。另请参阅Windows版本的问题60020968;和33846055,538609(适用于您的Linux版本)。
qxgroojn5#
我需要单调和实时。
对于单调,我只采用性能计数器,因为挂钟基线没有意义。
和类似的_ftime()函数不同。
然后是POSIX兼容函数...参见POSIX头中的typedef和宏。
bgtovc5b6#
您可以使用timespec_get来实现简单的clock_gettime。
(timespec_get功能自C11起可用)
......但是结果timespec在我的windows764位机器上有大约10毫秒的分辨率。
下面是我的clock_gettime版本。