我有一个带结构的队列。该结构包括将自身推入队列的确切时间
我有类似的东西看系统时间:
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(以毫秒为单位)。
我希望有人可以得到我想要的东西..:\
答案 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的一部分