Foros del Web » Programación para mayores de 30 ;) » .NET »

ejecutar un hilo continuamente sin saturar el PC

Estas en el tema de ejecutar un hilo continuamente sin saturar el PC en el foro de .NET en Foros del Web. Hola amigos, Por fin estoy terminando por fin mi primera aplicación programada íntegramente en Visual basic .NET en parte gracias a vuestra ayuda Miles de ...
  #1 (permalink)  
Antiguo 06/10/2006, 06:32
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
ejecutar un hilo continuamente sin saturar el PC

Hola amigos,

Por fin estoy terminando por fin mi primera aplicación programada íntegramente en Visual basic .NET en parte gracias a vuestra ayuda Miles de gracias a todos los que me habéis ayudado de una u otra forma.

Os cuento cómo está organizada: tengo 2 hilos, uno que debe leer CONTINUAMENTE de una base de datos y otro que debe actualizar esa base de datos cada 5 segundos. Tengo cuatro botones, dos para iniciar cada uno de ellos y los otros dos para pararlos respectivamente.

El hilo que actualiza la base de datos hace su trabajo correctamente por fin, pero el que lo debe leer continuamente me da más problemas. O bien se bloquea el PC (es muy potente y la base de datos apenas ocupa 100 KB) o bien me saltan continuamente avisos (hasta 300 en pocos segundos) con el mensaje "Error no especificado".

He probado a poner a dormir el que lee 1 segundo o dos y en ese caso ya no se bloquea ni satura el PC pero sin embargo no actualiza correctamente la base de datos...

¿Qué podría hacer para que se me ejecute el hilo continuamente sin saturar el PC? y sin que el hilo que actualiza interfiera con el que sólo lee?

Gracias

Ejemplo de código

Código:
Private Sub BLeerBD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLeerBD.Click
        ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
        actualizaLeerBD(ThreadLeerBD)
        compruebaHiloLeerActivo(ThreadLeerBD)
    End Sub

    Private Sub BStopLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BStopLeer.Click
        bandera1 = True
        MessageBox.Show("Botón STOP Pulsado (Leer)", "Aviso")
    End Sub

Public Sub actualizaLeerBD(ByVal ThreadLeerBD As System.Threading.Thread)
        System.Windows.Forms.Application.DoEvents()
        If ThreadLeerBD.IsAlive = True Then
            ThreadLeerBD.Start()
            ThreadLeerBD.IsBackground = True
        Else
            ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
            ThreadLeerBD.Start()
            ThreadLeerBD.IsBackground = True
        End If
    End Sub

    Public Sub compruebaHiloLeerActivo(ByVal ThreadLeerBD As System.Threading.Thread)
        While bandera1 = False
            System.Windows.Forms.Application.DoEvents()
            ThreadLeerBD.Sleep(1000)
            actualizaLeerBD(ThreadLeerBD)
        End While
    End Sub
  #2 (permalink)  
Antiguo 09/10/2006, 04:21
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
He pensado utilizar transacciones para intentar evitar que ambos hilos se "pisen", me funciona bien una de las transacciones (la de leer de la base de datos) pero la de actualizar me da un error:

"No se pudo actualizar; actualmente este elemento está bloqueado"

¿alguien sabe porqué sale este error? será alguna cuestión de integridad referencial? el caso es q solo lo estoy aplicando sobre una base de datos que simplemente consta de una tabla...

bueno a ver si alguien le ha pasado o sabe qué podría ser jeje

Gracias a todos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:44.