毫秒级计时的技能考试,目前还有三个BUG没能解决:
一是 偶显运行错误 argument ?,明天核对一下,摸不着头脑;
二是 偶显“comctl32.dll”读写错误,本地计时基本所有的人都出现错误,服务器计时,几乎没有错误,很是莫名;
三是 操作过程中少量机器出现卡顿(录完内容回车提交,停顿一下,才能清除数据并开始下一次的录入),导致操作数据可能录入错误或误操作。代码执行顺序:
1、取服务器时间为开始时间 select getdate() as 时间
2、启动时间回调函数 timeid := timeSetEvent(1, 1, @MyCallBack, 0, TIME_PERIODIC)
3、时间回调函数中取服务器时间计时,倒计时显示在edit控件中
4、DBGrideh显示数据表,并随着进度移动
5、将数据写入数据表
6、完成
我初步怀疑5可能影响速度,出现卡顿,修改为:不再写入服务器数据,用TstringList暂时保存数据,5完成后,再进行数据写入。我想问,上面1-5中哪一个操作最后可能引起卡顿?本地局域网还有其他什么情况会引起卡顿?
有请高手给分析一下。

解决方案 »

  1.   

    明天我准备着手修改4,将数据一次性显示在stringgrid,这样是不是可以减少通讯,避免卡顿?
      

  2.   

    偶显运行错误 argument out of range?
    实在是找不到原因了,难道又是dbgrideh的版本BUG?
      

  3.   

    毫秒级计时的技能考试???这种精度的程序为何还要使用第三方控件,建议你取消使用DBGridEh,改用DBGrid,或自己重写DBGrid
      

  4.   

    不太明白,DBGrid影响小一些?
      

  5.   

    刷新UI也挺耗性能,另外,你出现的这种异常,可能是由于数据集更新,导致DBGridEh 的游标异常,你可以在更新数据前数据集与UI解绑(DisableControls),数据更新后再绑定(EnableControls)试下。
      

  6.   

    刷新UI也挺耗性能,另外,你出现的这种异常,可能是由于数据集更新,导致DBGridEh 的游标异常,你可以在更新数据前数据集与UI解绑(DisableControls),数据更新后再绑定(EnableControls)试下。
    我试一下,以前有过这样的错误,更换版本后正常,不知道为什么又出现了,头疼。
    我也试一下楼上的意见,换成DBGrid试一试。
      

  7.   

    高版本windows(win8+),可以直接使用GetSystemTimePreciseAsFileTime,这个可以非常精确地取时间(微妙级)
    在老版本windows上,可以:
    timeBeginPeriod(1);
    GetSystemTimeAsFileTime(...); 或者timeGetTime()
    timeEndPeriod(1);
    可以达到毫秒级计时精度
    如果只是高精度取时间,不需要使用多媒体计时器回调
      

  8.   

    我是用的
    timeBeginPeriod(1);
    timeGetTime()
    timeEndPeriod(1);

    timeid := timeSetEvent(1, 1, @MyCallBack, 0, TIME_PERIODIC);
    随机的差几毫秒,可以接受。
    目前就是一个“COMCTL32.dll”偶有BUG,不知道如何解决?
    使用DBGRIDEH和DBGRIDEH均有该BUG。
      

  9.   

    COMCTL32.dll和OCX/ActiveX相关,可能是操作Excel导致的?
      

  10.   

    用尽了办法找不到解决方法,最后发现错误不影响运行,就直接错误屏蔽了。
    这个界面没有使用excel。网上的方法都不行,尤其是换文件,678910五个版本统统不行。