0

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

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

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

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

我希望有人能得到我想说的.. :\

4

3 回答 3

3

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

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

于 2011-05-17T18:10:37.917 回答
1

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

于 2011-05-17T18:10:10.197 回答
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 的一部分

于 2011-05-17T21:22:28.540 回答