各位大大好! 好久没来坛子了 最近要给学校做个小软件 测试人的反应时间 正常人约(200~300ms) 因为是实验数据要求精确到1ms  没有其他实验硬件设备 就一台电脑 电脑键盘的延时可以忽略  类似这样 MapShow()//出现一幅画面
GetResponseTime()//取第一次系统时间
         .
         .
PesponseKeyPress()//测试者按下键盘
GetResponseTime()//取第二次系统时间GetTickCount QueryPerformanceCounter
貌似都不行因为win nt后都是多线程 当前的代码可能会被挂起 所以取得的数据不具可信度
GetThreadTimes GetProcessTimes貌似也不行可以参见下面的链接http://blog.kalmbachnet.de/?postid=28
想请问大虾们有没有什么办法可以正确的得到反应时间 或者有没有知道两个GetResponseTime()之间被分配了多少CPU时间片? 

解决方案 »

  1.   

    GetTickCount 不行
    QueryPerformanceCounter 够了
    多线程影响应该几乎可以忽略
      

  2.   

    不对吧 人的反应时间大概200~300ms这里貌似有好多个CPU分给其他线程的时间片了
    一般好像是20ms这样有可能其他优先级高的线程执行了 那其中的误差就有20ms以上了把
    但是我要误差在1ms左右  我知道我这样理解对不对
      

  3.   

    记得NT算是协作多任务,也许win2000以后不是了
    但是,如果别的进程、线程没有持续的高负荷,切换的开销应该是1ms以下的吧如果真的很担心这个,可以做一个以前的dos下的程序好了
      

  4.   

    用个Timer,不就是 ms 级别的吗?
      

  5.   

    timer不行,不够精确
    GetTickCount用过, 比timer强
    其他的就不知道了
      

  6.   

    我做过类似程序,GetTickCount的,精度是1/64秒。
    GetTickCount和Timer最大精度也就1/64秒。
    做这个1/64秒其实也差不多了。
      

  7.   

    gettickcount精度够了 但是结果不准确 中间可能会有其他代码的执行占用了时间
      

  8.   

    一个cpu时间片大概20ms左右 倘若MapShow的时候当前分配给该线程的时间片正好用完了且突然有个线程的优先级比他高 那么系统就会去执行优先级高的线程 至少被分走了一个cpu时间片 所以误差可能会在20ms以上
    这样的数据不具可信度啊
      

  9.   

    1/64S已经有15ms了 误差太大了吧
      

  10.   

    Cai总,我来给你顶一下!!!
      

  11.   

    开始测试时提升线程等级THREAD_PRIORITY_TIME_CRITICAL,测试结束后恢复线程等级
      

  12.   

    晕到死的实时性很差的,这个你就别想了
    写个dos下的程序比较现实点