Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Una de Sincronismo (https://www.clubdelphi.com/foros/showthread.php?t=7169)

Rabata 06-02-2004 09:40:44

Una de Sincronismo
 
Buenas a Todos....

Mi Pregunta es la siguiente:

Tengo un Proceso en una aplicación, k se ejecuta cuando se produce una entrada externa + ó - 8 veces por segundo (cuando hay mucha carga de trabajo), mi intención es parar ese proceso y despues reactivarlo sin k se pare el programa,..... me explico mejor....

Tengo un proceso se ejecuta y cuando llega a una determinada línea si se produce una serie de condiciones kiero k ese proceso se me pare, pero otro proceso k viene por detrás ejecutando el mismo codigo siga su procesamiento e incluso adelantar al anterior...

Ejemplo:

Procedure Tratamiento_Dato(.....);
Begin
...
Proceso 1 // por aki va el proceso 1
...
...
Proceso 2 //Estan ejecutando el msmo proceso
...
End;

yo lo k kiero es en un momento dado es parar (un retraso) el proceso 2 pero k el resto de procesos se sigan ejecutando....

Es un problema de concurrencia..... (Sincronismo)....

Muchas Gracias por Vuestra Colaboración

maruenda 07-02-2004 16:08:22

pregunta de examen
 
vamos a ver. si todos los procesos comparten una variable, entonces hablamos de problemas de concurrencia. hay que evitar que dos procesos modifiquen al mismo tiempo dicha variable. pero si no modifican, ninguna variable, sino que simplemente ejecutan uncodigo, esto es , no comparten ningun recurso, yo usaria semaforos, pero ten en cuenta que si paras un procceso con la orden Wait ( es de C++, no se si existe algo parecido en delplhi ), dicho proceso solo podra ser reactivado por otro proceso . el mismo nunca se puede reactivar. deberias crear un proceso padre, que controle las variables que ocasionan la detencion de los procesos hijos. dicho proceso es el encargado de detener y despertar a los procesos. espero haberte sido de ayuda.

jachguate 07-02-2004 19:17:29

Antes de eso... como no lo indicas explicitamente, pues tu programa debiera ser multihilos...

Si no lo es aún, podes ver un ejemplo en la carpeta $delphi\Demos\Threads, y leer en la ayuda sobre TThread.

Hasta luego.

;)

uhilari 08-02-2004 00:32:23

Hola Primeramente

Cita:

Empezado por jacguate
como no lo indicas explicitamente, pues tu programa debiera ser multihilos...

Realmente Cierto, deberias leer un poco mas sobre este tema pero pasando a los aspectos tecnicos he de decirte que en delphi para crear un hilo solo debes de crear una nueva clase que sea hija de TThread algo asi:

Código:

TMiHilo=class(TThread)
protected
  procedure Execute; override;
end;

.
.
.

procedure TMiHilo.Execute;
begin
  .
  .
  .
end;

El procedimiento Execute es donde debes poner las ordenes que van a ser sincronizadas con los otros procedimientos.

Cita:

Empezado por maruenda
si todos los procesos comparten una variable, entonces hablamos de problemas de concurrencia. hay que evitar que dos procesos modifiquen al mismo tiempo dicha variable. pero si no modifican, ninguna variable, sino que simplemente ejecutan uncodigo, esto es , no comparten ningun recurso, yo usaria semaforos

En el primer caso que dice Maruenda estoy de acuerdo que debes usar Semaforos aunque como solo son dos procedimientos un Mutex seria mejor, pero en el segundo caso, es decir, si no comparten ningun recurso, no sera necesario que los sincronizes ya que no tendras efectos laterales.

En todo caso seria mejor que revises la demo de Hilos que trae el delphi

Suerte

Rabata 08-02-2004 09:54:23

Continuando con el sincronismo...
 
Lo k realmente me haria falta es parar un proceso durante un tiempo determinado....

Me gustaría poder parar un proceso 1/2 segundo....., pero no el programa en ejecución (sleep lo he probado y para el programa entero y no kiero eso)


Gracias a todos por vuestro interes....

jachguate 09-02-2004 05:49:07

si ya es multihilos... podes suspender el hilo, con lo que su ejecución queda pausada. Por supuesto debe haber otro hilo que luego haga un resume...

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 22:30:21.

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