none
thread nova com intervalo de tempo RRS feed

  • Pergunta

  • ja fiz essa pergunta, mas no lugar errado e n sei mudar , intaum la vai de novo ausauhs ^^

    tem cmo eu fazer uma thread ser executada de tempo em tempo , 

    mas sem o timer

    tipo , criei um nova thread e preciso que esta thread seja executada em um determinado intervalo de tempo ,

    com o timer funciona , mas gera um certo lag , entaum estou tentando fazer em uma thread separada .. 

    caso alguem saiba como , ou tenha alguma sugestao , metodo , ajudaria mt ^^

    mais uma vez vlw a todos ;)


    AleSaggiorato

    terça-feira, 15 de janeiro de 2013 22:38

Respostas

  • Você pode usar o método Sleep do objeto Thread:

    MinhaThread.Sleep(TempoEmMilessegundos)

    Aí dentro do método que é executado pela thread você faz um loop:

    Do
    'Seu código aqui...
    Thread.CurrentThread.Sleep(TempoEmMilessegundos)
    Loop



    Herbert Lausmann

    Gerenciador de Logins

    • Marcado como Resposta AleSaggiorato terça-feira, 15 de janeiro de 2013 23:17
    terça-feira, 15 de janeiro de 2013 22:54
  • Eu acho que você inverteu as coisas, testa o código assim:

    Public Class Form1
        Dim time As Threading.Timer
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            time = New Threading.Timer(New Threading.TimerCallback(AddressOf MyCallBack), Nothing, TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(5))
        End Sub
        Private Sub MyCallBack()
            Dim png As New Net.NetworkInformation.Ping
            Dim pngr As Net.NetworkInformation.PingReply
            Dim result As String
            Try
                pngr = png.Send("www.google.com.br")
                result = pngr.RoundtripTime
            Catch ex As Exception
                result = "Failed"
            End Try
            ListBox1.BeginInvoke(New Action(Of String)(AddressOf AddItem), {result})
        End Sub
    
        Private Sub AddItem(result As String)
        ListBox1.Items.Add(Date.Now.Minute & " : " & Date.Now.Second & "  =  " & result)
        End Sub
    
    End Class


    Herbert Lausmann

    Gerenciador de Logins

    • Marcado como Resposta AleSaggiorato quarta-feira, 16 de janeiro de 2013 18:05
    quarta-feira, 16 de janeiro de 2013 17:10

Todas as Respostas

  • Você pode usar o método Sleep do objeto Thread:

    MinhaThread.Sleep(TempoEmMilessegundos)

    Aí dentro do método que é executado pela thread você faz um loop:

    Do
    'Seu código aqui...
    Thread.CurrentThread.Sleep(TempoEmMilessegundos)
    Loop



    Herbert Lausmann

    Gerenciador de Logins

    • Marcado como Resposta AleSaggiorato terça-feira, 15 de janeiro de 2013 23:17
    terça-feira, 15 de janeiro de 2013 22:54
  • não ,acho que eu não expressei direito oque eu preciso , o sleep não me judaria neste caso , 

    mais ou menos assim :

     Private Sub timer_tick(sender As Object, e As EventArgs) Handles timer.Tick
    
     thread = New Threading.Thread(New Threading.ThreadStart(AddressOf aqui))
            thread.Start()
    
        End Sub
    
        Private Sub aqui()
    
            ListBox1.BeginInvoke(New MethodInvoker(AddressOf addin))
    
        End Sub
        Private Sub addin()
            ListBox1.Items.Add("Uno")
        End Sub

    bom , é mais ou menos isso , porem a thread nova esta sendo criada a partir do timer

    e esse timer me gera um certo lag,

    tipo , no form load eu criasse a nova thread ,

    e essa thread ja tivesse um "timer" -   pra ser executada de tempo em tempo

    sem precisar ta criando novas threads apartir do timer ,

    vlw  


    AleSaggiorato

    terça-feira, 15 de janeiro de 2013 23:04
  • erro de interpretação minha , o loop e o sleep ficam na nova thread , vlw mesmo :D

    AleSaggiorato

    terça-feira, 15 de janeiro de 2013 23:18
  • bom apesar de ter funcionado , sempre que executa código do "Try" gera um certo lag na interface

    aii fiz assim :

    Public Class Form1

        Dim time As Threading.Timer

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            time = New Threading.Timer(New Threading.TimerCallback(AddressOf MyCallBack), Nothing, TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(5))
        End Sub
        Private Sub MyCallBack()
            ListBox1.BeginInvoke(New MethodInvoker(AddressOf aqui))
        End Sub
        Private Sub aqui()
            Dim png As New Net.NetworkInformation.Ping
            Dim pngr As Net.NetworkInformation.PingReply
            Dim result As String
            Try
                pngr = png.Send("www.google.com.br")
                result = pngr.RoundtripTime
            Catch ex As Exception
                result = "Failed"
            End Try
            ListBox1.Items.Add(Date.Now.Minute & " : " & Date.Now.Second & "  =  " & result)
        End Sub

    porem ainda gera o dito lag =/ 

    pensando bem , n sei se é possivel fazer este mesmo esquema sem q congele a tela nem q seja por um segundo,


     

    AleSaggiorato

    quarta-feira, 16 de janeiro de 2013 15:31
  • Eu acho que você inverteu as coisas, testa o código assim:

    Public Class Form1
        Dim time As Threading.Timer
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            time = New Threading.Timer(New Threading.TimerCallback(AddressOf MyCallBack), Nothing, TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(5))
        End Sub
        Private Sub MyCallBack()
            Dim png As New Net.NetworkInformation.Ping
            Dim pngr As Net.NetworkInformation.PingReply
            Dim result As String
            Try
                pngr = png.Send("www.google.com.br")
                result = pngr.RoundtripTime
            Catch ex As Exception
                result = "Failed"
            End Try
            ListBox1.BeginInvoke(New Action(Of String)(AddressOf AddItem), {result})
        End Sub
    
        Private Sub AddItem(result As String)
        ListBox1.Items.Add(Date.Now.Minute & " : " & Date.Now.Second & "  =  " & result)
        End Sub
    
    End Class


    Herbert Lausmann

    Gerenciador de Logins

    • Marcado como Resposta AleSaggiorato quarta-feira, 16 de janeiro de 2013 18:05
    quarta-feira, 16 de janeiro de 2013 17:10