极为变态的一个线程问题!高手指教!
热门软件下载:
我在主线程中开启了一个线程,在该线程中循环执行一段代码,在执行该段代码之前和代码执行完之后使用getthreadtimes()来精确计时,发现这段代码的执行时间有时时0,有时是15。625个毫秒,观察getthreadtimes()的计时值,发现这15。625个毫秒是kernel time,为此我感到非常奇怪,这15。625应该不是线程切换造成的,因为getthreadtimes()得出来得kernel time在msdn中的描述是线程在核心态下执行的时间,更奇怪的是,我这段代码只是一个非常简单的循环赋值操作,不可能有user mode到kernel mode的切换过程。该线程中的代码如下所示:
filetime kerneltimestart,usertimestart,kerneltimeend,usertimeend,dummy;
for (int k=0; k<50; k++)
{
int j;
getthreadtimes(getcurrentthread(),&dummy,&dummy,&kerneltimestart,&usertimestart);
for (int i=0; i<4000000; i++)
{
j=i;
}
getthreadtimes(getcurrentthread(),&dummy,&dummy,&kerneltimeend,&usertimeend);
__int64 totalkerneltimes,totalusertimes,totaltimes;
totalkerneltimes=filetimetoquadword(&kerneltimeend)- filetimetoquadword(&kerneltimestart);
totalusertimes=filetimetoquadword(&usertimeend)-filetimetoquadword(&usertimestart);
totaltimes=totalkerneltimes+totalusertimes;
}
推荐阅读
相关评论