我正在编写一个线程库,在调度线程时,我需要知道它们已经准备了多长时间。每个 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)。
有任何想法吗?谢谢!
您应该将结果作为 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。
| 归档时间: |
|
| 查看次数: |
5027 次 |
| 最近记录: |