Ver Mensaje Individual
  #1  
Antiguo 26-02-2014
rabata2001 rabata2001 is offline
Miembro
 
Registrado: nov 2010
Posts: 88
Reputación: 14
rabata2001 Va por buen camino
Post Seccion crítica

Buenas a todos

Deseo realizar un proceso de clasificación de resultados y se trata de un proceso complejo que puede tardar unos 20oms que se repite con cada entrada de datos, y este proceso se puede ejecutar desde distintos puntos
1. cada entrada de mensaje
2. presionando un botón y realiza la clasificacion
3. un timer que se ejecuta cada 10 segundo s que realiza el mismo proceso.

La primera vez se realiza por cada entrada y los otros dos se realizan por si falla algo del proceso 1 o se cambio algo directamente en bbdd.

La idea es crear un seccion critica que encapsule al procedimiento de clasificacion para que se ejecute en orden y nada pueda entrar en ella miestrtas se esta realizando, si se reciben 10 mensajes a la vez se deben ejecutar en orden y eserar cada uno a que termine el anterior.

la idea es :

Bloquear (Lock)
realiza Proceso -- aqui se hacen todas las acciones (cambiar array, consultar bbdd, escribir bbdd, escribir stringgrid
Libera (Release)

Por ejemplo llegan 3 mensajes, y se presiona un vez el botón de clasificar y luego otros dos mensajes (en 100 ms)

el resultado deseado es

Mensaje1 bloquea
Proceso Clasifica
Mensaje1 libera

Mensaje2 bloquea
Proceso Clasifica
Mensaje2 libera

Mensaje3 bloquea
Proceso Clasifica
Mensaje3 libera

Boton Clasifica bloquea
Proceso Clasifica
Boton Clasifica libera

Mensaje4 bloquea
Proceso Clasifica
Mensaje4 libera

Mensaje5 bloquea
Proceso Clasifica
Mensaje5 libera

He usado sin creacion de hilos (no deseo usar hilos si puede ser). criticalsection, mutex, rtlcriticalsecrtion , pero o no los entindo bien o se deben usar siempre con hilos. tener en cuenta que el proceso es largo y tiene muchas cosas a hacer pero lo que quiero es garantizar que dentro de la region critica tan sólo se está ejecutando un proceso.

Podrías indicarme algún tipo de ayuda.

Gracias a todos por vuestra colaboracion
Responder Con Cita