none
Trabajo con hilos RRS feed

  • Pregunta

  • Hola buenos dias.

    mi problema es el siguiente, tengo un servicio que esta revisando cada 20 seg la base de datos, en caso que el encuentre algo que cumpla la condicion de una notificacion se debe enviar mensajes de texto al grupo o grupos de usuarios que hayan sido asignados al momento de crear la notifacion (ejemplo Notificacion 1; condicion A > 2), Cuando esta condicion se cumple, el servicio genera un evento en el cual se realiza la consulta a la base da datos para verificar a que usuarios fue asignada la Notifiacion, y saca sus numeros de celular, como la lista de numeros puede ser muy grande he generado una especie de bandeja de salida donde utilizo un Queue, formada de mensaje y numero de celular, y apartir de esta saco un mensaje cada 2 seg. para esto he creado un hilo, utilizando timer, donde cada 2 segundo me genera el evento elapsed y saca y elimina el mensaje que este en la cabeza del Queue y es entregado a la funcion de envio de Message, y aqui comienza mi problema, ya que solo me envia el primer mensaje, y parece que el servicio se bloqueara, esto lo digo por que el genera un log el cual se llena diciendo si se cumple o no la notificacion, y si se cumple a que celulares fue enviada, y en este caso solo me muestra el numero al que se envio y no me vuelve a registrar nada. entonces no se por que pasa esto, depronto timer no es adecuado para este caso, o algo hace que los dos hilos se bloqueen. mmmm no se mas escribir, depronto enrredo la cosa, si tiene dudas estar pendiente.

    Ah lo de la bandeja de entrada lo hago por que para el envio del los sms se utiliza un moden Enfora, y se demora mas o menos 2 seg el evio de un mensaje.

    Gracias

     

     

    martes, 6 de abril de 2010 17:18

Todas las respuestas

  • No hay suficiente información para saber qué es lo que te está pasando. En principio, no hay inconveniente para lanzar un hilo en un thread, tanto si lo creas directamente como si es un hilo creado por un timer. Lo que no puede funcionar es un timer que dependa de la bomba de mensajes de Windows, ya que no está disponible en un servicio. No has comentado qué entorno de programación estás usando, pero si trabajas con .Net, lo anterior se traduce en que puedes usar un System.Timers.Timer o un System.Threading.Timer, pero no puedes usar un System.Windows.Forms.Timer.

    Aparte de eso, lo que puedes tener es algún problema de sincronización en las variables compartidas por los hilos. Por ejemplo, si estás usando un System.Collections.Generic.Queue<T> como cola, hay que tener en cuenta que estas colas no son seguras frente acceso en multihilo, por lo que tienes que poner bloqueos en el momento de insertar y leer de la cola.

    También hay que tener presente qué pasa si el timer si vuelve a disparar cuando todavía no se ha terminado de enviar el anterior mensaje. ¿Soporta esta situación correctamente tu rutina de envío de mensajes?

    Como ves, son bastantes las cosas que hay que tener en cuenta, y no se puede deducir qué es lo que te puede estar pasando a partir de la información que has puesto en la pregunta.

     

    miércoles, 7 de abril de 2010 20:33