这是一个多线程应用程序,在其中一个子线程中我编写了下面的代码来计算线程运行函数的执行时间:
class CThreadObject{
public:
...
unsigned long GetTime(){
struct timeval val;
gettimeofday(&val, NULL);
return (val.tv_sec * 1000000 + val.tv_usec);
}
static void* Run(void *param){ // thread function
while (1){
static unsigned long ExecTime = GetTime();
unsigned long LastExecTime = 0;
if (TurnOnTest()){
LastExecTime = ExecTime;
ExecTime = GetTime();
mQueue.push_back(ExecTime - LastExecTime);
//std::deque<unsigned long> mQueue
}
//some other jobs such as
//I/O demultiplex and events dispatching
.......
};
return NULL;
}
void PrintStatistics(){
unsigned long tmp = 0;
while(mQueue.size()){
tmp += *mQueue.begin();
mQueue.pop_front();
}
printf("the total time is %lu\n", tmp);
}
private:
...
std::deque<unsigned long> mQueue;
pthread_t mThread;
};
应用程序只执行了 1 分钟,但我发现 gQueue 的所有元素累积的时间为 175 秒,比整个应用程序的时间还长。为什么会发生这种情况?
[更新]
增加了一项功能——PrintStatistics()