FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
WaitForSingleObject se queda bloqueada
Tengo una pequeña funcion para guardar mensajes de log en un archivo (la misma que publique en la seccion de trucos). La funcion funciona muy bien, y nunca me habia dado problemas hasta ahora
El problema aparece cuando se crean varios threads y desde todos ellos se llama a la funcion. Al principio parece que aguanta bien, ya la he usado en varios programas con threads sin problemas, pero cuando se hace un uso muy intensivo de la misma a veces falla. Cuando falla, la funcion WaitForSingleObject se queda esperando indefinidamente, bloqueando asi el thread que llamo la funcion. El codigo es el siguiente (abajo pongo un ejemplo en un zip)
Y para probar la funcion utilizo el siguiente codigo:
No se que puede estar fallando, hasta utilizo un bloque "try ... finally" para asegurarme de que se libera el mutex, pero aun asi nada ¿Alguien puede ver lo que se me escapa? El problema se podria solucionar cambiando el parametro INFINITE por un tiempo mas pequeño, pero ademas de que eso seria una chapuza, se perderian mensajes. Última edición por seoane fecha: 12-03-2008 a las 23:14:46. |
#2
|
||||
|
||||
Ya me respondo yo , el problema estaba aquí:
Me estaba apropiando del mutex al crearlo y no lo estaba liberando Solución:
Llevo varios días dándole vueltas y hasta que lo publique no me dí cuenta de ese detalle. |
#3
|
||||
|
||||
Hola,
Probando el programa de ejemplo que has puesto, ¿cuándo se supone que falla? Supongo que cuando se crean cinco hilos (generalmente) y no se continua adelante. ¿Es así? Puesto que si abres varias instancias del programa y, cierras alguna, no siempre, pero, a veces los hilos comienzan a crearse "sin límite", que es lo que se supone que tiene que pasar siempre, si no me equivoco. Lamento no saber decir Domingo, sólo tenía esas dudas, por un lado, y, por otro, quizás algo extraño, y es que, si en lugar de "INIFINITE", como has dicho, lo cambio por algunos milisegundos, el programa se comporta igual, y, esto me confunde, porque antes dijiste que con eso podría solucionarse, pero, que, era una chapuza. Sea o no una chapuza (que si tú lo dices será así) digo que el programa se comporta igual en mi caso. Windows XP SP2 Delphi 2007 for Win32 Edito: Ya vi que encontraste la solución. También la probé y funciona bien todo. Pues nada, eres más rápido tú en preguntar y solucionar que yo en tratar de decir esta boca es mía nada más... Última edición por dec fecha: 12-03-2008 a las 23:47:27. |
#4
|
||||
|
||||
Pues ya ves dec, un simple TRUE casi me vuelve loco
Lo que quedo claro es que escribir en el foro es toda una catarsis |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
me queda el relojito de arena | pmfras | Conexión con bases de datos | 7 | 28-09-2006 17:15:59 |
uso de WaitForSingleObject para hacer un instalador | crievep | Varios | 5 | 05-04-2006 02:05:35 |
Lepe no se queda atras | vtdeleon | Noticias | 10 | 10-11-2005 13:37:02 |
Bloqueada solo una tabla de varias en pdx | purhé | Tablas planas | 1 | 26-07-2005 07:43:11 |
|