+ -
当前位置:首页 → 问答吧 → vb6 Timer控件为啥连1s精度都达不到呢?

vb6 Timer控件为啥连1s精度都达不到呢?

时间:2011-08-12

来源:互联网

我用vb6做了一个程序,用来读取仪表的数据,每隔1s钟往sql2000里面存数,按理说,数据库里时间字段相邻的记录之间应该都是相差1s,但是实际上常会出现相差2s的情况,请问是程序问题,还是计时器的问题呢?

  另外,我的时间字段存数时直接存的是vb的常数“Now”,存数方式采用的是调用存储过程。

作者: youzhj   发布时间: 2011-08-12

这是我的程序:VB code
Private Sub TmStore_Timer()

    Call RCsetting
    
    Dim strsql, sDtValue As String
    Dim rs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    
    cmd.ActiveConnection = conn
    cmd.CommandText = "Insert_Data"
    cmd.CommandType = adCmdStoredProc
    
    cmd.Parameters(1) = Now
    cmd.Parameters(2) = Val(Ua.Text)
    cmd.Parameters(3) = Val(Ub.Text)
    cmd.Parameters(4) = Val(Uc.Text)
    cmd.Parameters(5) = Val(Uab.Text)
    cmd.Parameters(6) = Val(Ubc.Text)
    cmd.Parameters(7) = Val(Uca.Text)
    cmd.Parameters(8) = Val(Ia.Text)
    cmd.Parameters(9) = Val(Ib.Text)
    cmd.Parameters(10) = Val(Ic.Text)
    cmd.Parameters(11) = Val([In].Text)
    cmd.Parameters(12) = Val(Pa.Text)
    cmd.Parameters(13) = Val(Pb.Text)
    cmd.Parameters(14) = Val(Pc.Text)
    cmd.Parameters(15) = Val(Psum.Text)
    cmd.Parameters(16) = Val(Qa.Text)
    cmd.Parameters(17) = Val(Qb.Text)
    cmd.Parameters(18) = Val(Qc.Text)
    cmd.Parameters(19) = Val(Qsum.Text)
    cmd.Parameters(20) = Val(Sa.Text)
    cmd.Parameters(21) = Val(Sb.Text)
    cmd.Parameters(22) = Val(Sc.Text)
    cmd.Parameters(23) = Val(Ssum.Text)
    cmd.Parameters(24) = Val(PFa.Text)
    cmd.Parameters(25) = Val(PFb.Text)
    cmd.Parameters(26) = Val(PFc.Text)
    cmd.Parameters(27) = Val(PF.Text)
    cmd.Parameters(28) = Val(U_unbl.Text)
    cmd.Parameters(29) = Val(I_unbl.Text)
    cmd.Parameters(30) = Val(THD_Ua.Text)
    cmd.Parameters(31) = Val(THD_Ub.Text)
    cmd.Parameters(32) = Val(THD_Uc.Text)
    cmd.Parameters(33) = Val(THD_U.Text)
    cmd.Parameters(34) = Val(THD_Ia.Text)
    cmd.Parameters(35) = Val(THD_Ib.Text)
    cmd.Parameters(36) = Val(THD_Ic.Text)
    cmd.Parameters(37) = Val(THD_I.Text)
    cmd.Parameters(38) = strR
    cmd.Parameters(39) = strC

    Set rs = cmd.Execute
    
End Sub

作者: youzhj   发布时间: 2011-08-12

你的 RCsetting 是什么,或不会是它的执行占用了太长的时间呢?

作者: mokton   发布时间: 2011-08-12

怎么没人回答啊,都怕这个问题么?

作者: youzhj   发布时间: 2011-08-12

没办法特精确定时,因为系统运行的缘故,每个时刻的进程有可能不一样,cpu占用也不会一样,因此有差别是很可能的,但不会差很多,除非cpu被摸个进程占用很长时间。进程越多差别越大。

作者: z_wenqian   发布时间: 2011-08-12

应该是你的定时器内的任务执行时间超过了1s,优化你的定时器内程序把一些变量的定义等放到外部到去,再测试下。

别外可以考虑不用存储过程,直接用sql语句insert into 插入数据(建议测试一下)。

作者: chinaboyzyq   发布时间: 2011-08-12

程序中的时间控件,受程序运行时对CPU时间资源被占用的影响。比如程序“假死”一会,时间就会不精确。
如果想精确控制,建议用多媒体计时器来做。

作者: cuizm   发布时间: 2011-08-12

引用 2 楼 mokton 的回复:

你的 RCsetting 是什么,或不会是它的执行占用了太长的时间呢?

VB code

'设置电阻电容对应字符串
Public Sub RCsetting()
    
    Dim sRa, sRb, sRc, sRab, sRbc, sRca As String
    Dim sCa, sCb, sCc, sCab, sCbc, sCca As String
    
    If Len(Ra.Text) > 0 Then sRa = "Ra" & "(" & Ra.Text & ")+"
    If Len(Rb.Text) > 0 Then sRb = "Rb" & "(" & Rb.Text & ")+"
    If Len(Rc.Text) > 0 Then sRc = "Rc" & "(" & Rc.Text & ")+"
    
    If Len(Rab.Text) > 0 Then sRab = "Rab" & "(" & Rab.Text & ")+"
    If Len(Rbc.Text) > 0 Then sRbc = "Rbc" & "(" & Rbc.Text & ")+"
    If Len(Rca.Text) > 0 Then sRca = "Rca" & "(" & Rca.Text & ")+"
    
    strR = sRa & sRb & sRc & sRab & sRbc & sRca
    If Len(strR) > 0 Then strR = Left(strR, InStrRev(strR, "+") - 1)
    
    If Len(Ca.Text) > 0 Then sCa = "Ca" & "(" & Ca.Text & ")+"
    If Len(Cb.Text) > 0 Then sCb = "Cb" & "(" & Cb.Text & ")+"
    If Len(Cc.Text) > 0 Then sCc = "Cc" & "(" & Cc.Text & ")+"
    
    If Len(Cab.Text) > 0 Then sCab = "Cab" & "(" & Cab.Text & ")+"
    If Len(Cbc.Text) > 0 Then sCbc = "Cbc" & "(" & Cbc.Text & ")+"
    If Len(Cca.Text) > 0 Then sCca = "Cca" & "(" & Cca.Text & ")+"
    
    strC = sCa & sCb & sCc & sCab & sCbc & sCca
    If Len(strC) > 0 Then strC = Left(strC, InStrRev(strC, "+") - 1)

End Sub

作者: youzhj   发布时间: 2011-08-12

你好,一开始我就是采用insert的方式直接插入数据,出现了上述问题,我以为是 insert语句效率低所以才改成存储过程的,不过改了后还是有同样的问题。
引用 5 楼 chinaboyzyq 的回复:

应该是你的定时器内的任务执行时间超过了1s,优化你的定时器内程序把一些变量的定义等放到外部到去,再测试下。

别外可以考虑不用存储过程,直接用sql语句insert into 插入数据(建议测试一下)。

作者: youzhj   发布时间: 2011-08-12

热门下载

更多