系统时间,以毫秒为单位

时间:2011-05-17 18:04:58

标签: c++ milliseconds ctime time.h

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

我有类似的东西看系统时间:

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 ));

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

我希望有人可以得到我想要的东西..:\

3 个答案:

答案 0 :(得分:3)

您可以使用gettimeofday然后减去存储在队列元素中的时间。 gettimeofday()可以提供毫秒级的时间分辨率。您可以查看此SO link了解详情。

这假设堆栈中的每个元素也存储了它被推入的时间。如果元素没有它,你可以存储一个带有元素和时间的结构,或者有一个单独的堆栈与单独一次。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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的一部分