当前位置:首页 » 业界相关

极为变态的一个线程问题!高手指教!

 Advertisement:

热门软件下载:


我在主线程中开启了一个线程,在该线程中循环执行一段代码,在执行该段代码之前和代码执行完之后使用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;  
                    }

.

推荐阅读

  • 四天来为您献上展会直播的工作间 [详细内容]
  • 索尼宣布销售史上最轻笔记本电脑 [详细内容]
  • 关于三星SCH-A539的使用感受 [详细内容]
  • 展览中心台湾展区 [详细内容]
  • 索尼中国力争4年内赶超日本业务 [详细内容]
  • 与小8的半个月 [详细内容]
  • 北京七星华创电子股份有限公司 [详细内容]
  • 网友回答:
     

    相关评论

    Login