Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2014
rabata2001 rabata2001 is offline
Miembro
 
Registrado: nov 2010
Posts: 88
Poder: 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
  #2  
Antiguo 26-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Crea una simple cola (una lista FIFO). Que llegan peticiones... pues a la cola, que esperen, porque el funcionari solamente puede atender de uno en uno
Responder Con Cita
  #3  
Antiguo 27-02-2014
rabata2001 rabata2001 is offline
Miembro
 
Registrado: nov 2010
Posts: 88
Poder: 14
rabata2001 Va por buen camino
algún ejemplo en delphi de utilizacion de pilas (FiFO)

Crea, Apila, deapila y Vacia Pila.

tengo un indytcp server que recibe los mensajes, en el evento execute debería realizar introducir en pila (Apila),

Después realizar un procedimiento que deaplila. ¿como me aconsejáis con un timer? o ¿hay algún componente para manejo de pilas en delphi?.

Gracias y saludos.
Responder Con Cita
  #4  
Antiguo 27-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No, no, nada de timer. Cuando termina con uno, empieza con otro, como en la vida real, en las colas.

Puedes usar un simple stringlist para añadir tareas a la cola y eliminarlas según van acabando y que pase a la siguiente que toque.
Responder Con Cita
  #5  
Antiguo 27-02-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por rabata2001 Ver Mensaje
...
¿hay algún componente para manejo de pilas en delphi?.
..
Hola rabata2001.

Delphi implementa la clase TQueue para el manejo de colas y TStack para el manejo de pilas.

Un ejemplo (más que básico) que utiliza ambas:
Código Delphi [-]
...
uses Contnrs;

procedure TForm1.Button1Click(Sender: TObject);
var
  Queue: TQueue;
  Stack: TStack;
  i: Integer;
begin
  ListBox1.Clear;
  Stack:= TStack.Create;
  Queue:= TQueue.Create;
  try
    for i:= 0 to 5 do
    begin
      Stack.Push(Pointer(i));
      Queue.Push(Pointer(i));
    end;
    for i:= 0 to 5 do
      ListBox1.Items.Add(Format('%d - %d',[Integer(Stack.Pop),Integer(Queue.Pop)]));
  finally
    Stack.Free;
    Queue.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mozilla critica el nuevo test de seguridad para navegadores de Microsoft marcoszorrilla Noticias 1 16-10-2011 15:53:19
Sección trabajo DDiez Varios 4 30-11-2007 19:28:21
Vulnerabilidad crítica en Firefox gmontes Noticias 1 13-07-2007 22:18:35


La franja horaria es GMT +2. Ahora son las 15:58:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi