C++计时器(以微秒为单位)
C++ timer in microseconds
我正在尝试以微秒为单位进行计时器,但它不太起作用。
#include <time.h>
#include <iostream>
#include <unistd.h>
using namespace std;
int main ()
{
struct timespec start_time;
struct timespec end_time;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
usleep(5000);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
cout << "START: " << (start_time.tv_nsec/1000) << endl;
cout << "END: " << (end_time.tv_nsec/1000) << endl;
cout << "DIFF: " << (end_time.tv_nsec - start_time.tv_nsec) /1000 << endl;
return 0;
}
结果如下:
START: 3586
END: 3630
DIFF: 43
我需要DIFF在5000左右。有什么建议吗?
我不确定你想测量什么,但我猜CLOCK_PROCESS_CPUTIME_ID
是错误的计时器,如果你想测量一些经过的时间,你可能想要CLOCK_MONOTONIC
。看看一个类似的stackoverflow问题,它显示了clock_gettime
的不同时钟之间的差异。
也就是说,要获得完整的时间,你必须将每次测量的tv_sec
和tv_nsec
相加(当然,首先将tv_sec
转换为纳秒),然后减去总数,所以类似于:
uint64_t startNs = start_time.tv_sec * 1000 * 1000 * 1000 + start_time.tv_nsec;
uint64_t endNs = end_time.tv_sec * 1000 * 1000 * 1000 + end_time.tv_nsec;
uint64_t diffNs = endNs - startNs;
uint64_t diffMicro = diffNs / 1000;
如果您使用的是C++11,那么最好使用chrono命名空间中的一些高级类。
两件事。
- 我猜你需要CLOCK_REALTIME
timespec
有两个组成部分-在做减法时需要同时考虑这两个因素
尝试clock_gettime(clock_REALTIME,&start)clock_gettime(clock_REALTIME,&stop)
您还需要使用timespec结构的"tv_sec"部分。
时间=((stop.tv_sec-start.tv_sec)+(双)(stop.tw_nsec-start.tv.sec)/1e9)*1000//im ms
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- C++ 中 STL 中迭代器的大小(以字节为单位)是多少
- 如何使用 chrono 为带有累加器计时器的算法计时?
- 如何为带有计时功能的程序创建计时器?
- 为什么我不能为一个 asio io_service使用两个计时器?
- 为游戏添加计时器
- 如何在 c++ 中为我的游戏制作计时器,每 30 秒工作一次
- 两个纳秒之间的区别 计时::time_points,但以秒为单位
- 如何将基于提升的计时器转换为基于 Unix 的(提升date_time免费)类
- 如何在 Cocos2dx 中为进度计时器的精灵添加标签?
- 打开简历-我如何为计时器编写代码
- 如何为文本设置计时器
- 制作一个计时器,在以毫秒为单位的一定时间后执行某个函数
- 以微秒为单位对函数计时
- C++计时系统时间(以毫秒为单位),时间运算
- c++ /CLI system . timers .当设置Interval为100ms时,计时器以秒为单位经过20秒
- C++计时器(以微秒为单位)