gpt4 book ai didi

c++ - gettimeofday 返回负值

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:40 25 4
gpt4 key购买 nike

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

void Thread::startTiming() {
gettimeofday(&_timeInReady, NULL);
}

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

double Thread::getTimeInReady() const {
return TIME(_timeInReady.tv_sec,_timeInReady.tv_usec);
}

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

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

有什么想法吗?谢谢!

最佳答案

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

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

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

关于c++ - gettimeofday 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com