如何在多线程中使用timer 点击:934 | 回复:3



Linzhenrong

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2003年9月27日
发表于:2008-08-29 10:32:13
楼主
我用VB.net 来控制机器的运行,程序中使用了两个线程,一个线程来读写I/O 卡的输入和输出,另一个线程来控制机器的运行。在控制线程中, 我使用了多个timer, 通过调用另一个class中的system.form.timer, 来延时执行某一事件。机器运行后,我发现timer的延时越来越长,机器越跑越慢。 请大侠们指教一下。谢谢!



gm99cn2

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 53回
  • 年度积分:0
  • 历史总积分:121
  • 注册:2008年7月30日
发表于:2008-08-29 14:37:38
1楼
“System.Timers.Timer”用这个试试

yjd159

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 312回
  • 年度积分:0
  • 历史总积分:417
  • 注册:2007年3月03日
发表于:2008-08-29 15:55:59
2楼
你不会是一直new timer()而不释放吧?

Linzhenrong

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2003年9月27日
发表于:2008-09-02 13:23:30
3楼
先谢谢二位楼主。system.timers.timer 我试过了,结果还是一样。二楼的说法似乎有点道理,不过试了以后好像也不是。我把原码贴上,大家帮忙看一看。跑一段时间,实际的间隔时间增加大概 15ms, 而且是一直增加,请大虾们帮忙诊断一下。谢谢!

Private Sub ctrlthrd()

        Do While CtrlThread.ThreadState = ThreadState.Running
     
                IOvar.DelayTimer = 20
               IOvar.ExitSysTimer = False
           
              clsSysTimer.TimeProgram()

              。。。。。。。
          
            CtrlThread.Sleep(1)

        Loop

      End Sub

Public Class clsSysTimer

    Private Shared MyTimer As New System.Windows.Forms.Timer
    Private Shared ExitSysTimer As Boolean = False


    Private Shared Sub TimerEventProcessor(ByVal myObject As Object, ByVal myEventArgs As EventArgs)

        MyTimer.Stop
        ExitSysTimer = True
  
    End Sub

    Public Shared Sub TimeProgram()
        AddHandler MyTimer.Tick, AddressOf TimerEventProcessor

          MyTimer.Interval = IOvar.DelayTimer
         MyTimer.Start

        While ExitSysTimer = False

            'ExitSysTimer = True

            Application.DoEvents()

        End While

   End Class

热门招聘
相关主题

官方公众号

智造工程师