gettimeofday 返回负值

yot*_*moo 3 c++ gettimeofday

我正在编写一个线程库,在调度线程时,我需要知道它们已经准备了多长时间。每个 Thread 实例都有一个timeval _timeInReady字段,当我将一个实例推送到就绪队列时,我调用了这个函数:

void Thread::startTiming() {
    gettimeofday(&_timeInReady, NULL);
}
Run Code Online (Sandbox Code Playgroud)

当我想检查当前_timeInReady值时,我调用:

double Thread::getTimeInReady() const {
    return TIME(_timeInReady.tv_sec,_timeInReady.tv_usec);
}
Run Code Online (Sandbox Code Playgroud)

TIME 在哪里#define TIME(a,b) ((a*1000000) + b)这样我就可以得到总时间(以微秒为单位)。

我的问题是,由于某种原因,我在一段时间后检查该字段时得到了疯狂的负值(例如 -10293843)。

有任何想法吗?谢谢!

tro*_*foe 5

您应该将结果作为 64 位无符号整数返回,因为您需要整数微秒结果,而不是小数秒(这意味着返回double):

unsigned long long Thread::getTimeInReady() const
{
    return (unsigned long long)_timeInReady.tv_sec * 1000000ULL +
        (unsigned long long)_timeInReady.tv_usec;
}
Run Code Online (Sandbox Code Playgroud)

您的系统可能uint64_t比 更简洁unsigned long long,或者您可以typedef