【问题标题】:system time in millisecond c++以毫秒为单位的系统时间 C++
【发布时间】:2011-08-27 11:13:11
【问题描述】:

我有一个带有结构的队列。该结构包括将自身推入队列的确切时间

我有这样的东西来查看系统时间:

time_t rawtime;
struct tm * timeinfo;

time ( &rawtime );
timeinfo = localtime ( &rawtime );

long callTime=timeinfo->tm_hour*3600+timeinfo->tm_min*60+timeinfo->tm_sec;
q.push( Call( callNum, callTime, callLength ));

问题是当我从队列中弹出下一个结构时,我想计算结构在队列中等待的时间(以毫秒为单位)。

我希望有人能明白我想说的话.. :\

【问题讨论】:

  • 您实际上遇到了什么问题?您提供的代码编译得很好。
  • 您可以在 unix 上使用 gettimeofday 获得微秒
  • timer() 不是毫秒计时器 - 它的粒度是 1 秒。你可能想看看标准的 ctime() 函数,或者考虑操作系统特定的东西。

标签: c++ milliseconds ctime time.h


【解决方案1】:

您可以使用gettimeofday,然后减去存储在队列元素中的时间。 gettimeofday() 可以提供以毫秒为单位的时间分辨率。您可以查看此SO link 了解更多信息。

这是假设堆栈中的每个元素也存储它被压入的时间。如果元素没有它,您可以存储一个包含元素和时间的结构,或者有一个单独的堆栈与独自一人。

【讨论】:

  • C:\vy2\main.cpp|37|错误:'timeval' 未在此范围内声明|顺便提一句。 #include 已输入。
【解决方案2】:

您需要使用函数gettimeofday() 而不是time()。前者支持亚毫秒级精度,后者仅精确到最近的秒。

【讨论】:

  • 不是标准 C++ 的一部分,所以他的平台可能有也可能没有。
  • @WhoCares 不,它不 - 这是 Windows 不支持的 POSIX 事物。
  • 我只需要在这一行加上毫秒: long callTime=timeinfo->tm_hour*3600+timeinfo->tm_min*60+timeinfo->tm_sec 我的意思是像 tm_msec :\
  • @WhoCares 我们知道您想要什么,我们告诉您没有便携的方法可以做到!
  • 我认为可以使用clocks_per_sec,但我无法在脑海中计算它。我完全崩溃了。有人帮忙请:)
【解决方案3】:

gettimeofday 是一个答案,但如果您只想检查您的项目在队列中的时间有多长,clock_gettime() 可能更合适。 例如,您可以使用 CLOCK_MONOTONIC(假设我们不计算秒):

struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);
// do some action ....
struct timespec ts2;
clock_gettime(CLOCK_MONOTONIC,&ts2);
std::cout << "spend " << ts2.tv_nsec - ts.tv_nsec << " nanoseconds" << std::endl;

当然,clock_gettime 不是 C++ 的一部分,它是 POSIX.1-2008 的一部分

【讨论】:

  • 感谢回复,但它必须在 unix 下运行。这样做有用吗?
  • 当然,它是在 Single UNIX Specification, Version 2 中定义的。
猜你喜欢
  • 2015-01-24
  • 2012-02-23
  • 1970-01-01
  • 2013-09-21
  • 2012-04-28
  • 2015-05-29
  • 2015-07-17
  • 1970-01-01
  • 2019-12-26
相关资源
最近更新 更多