Casa
Top.Mail.Ru Yandeks.Metrika
Foro: "Principal";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

abajo

Hilo: Suspender / Reanudar y sincronizar Encontrar ramas similares


mitry   (2001-12-15 02:53) [0]

Estimados colegas, ayúdenme, por favor, no he dormido ya noches 3.
El problema es:
Si suspende (suspende) e inicia (reanuda) con frecuencia el subproceso que llama a Synchronize, cuando vuelve a dibujar la ventana, el programa se bloquea con frecuencia.
Por ejemplo, si ejecuta el siguiente programa y cambia entre él y Delphi, la aplicación que se muestra a continuación permanecerá en silencio para siempre:

usos
Windows, Mensajes, Sistemas, Clases, Gráficos, Controles, Formularios,
Diálogos, ExtCtrls, StdCtrls, ComCtrls;

tipo

TMyThread = class (TThread)
privada
Actualización del procedimiento;
protegido
Procedimiento de ejecución; anular
fin;

TMainForm = clase (TForm)
Timer1: TTimer;
procedimiento FormCreate (Sender: TObject);
procedimiento FormClose (Sender: TObject; var Action: TCloseAction);
procedimiento Timer1Timer (Sender: TObject);
privada
{Declaraciones privadas}
MyThread: TMyThread;
público
{Declaraciones públicas}
fin;

var
MainForm: TMainForm;

implementación

{$ R * .dfm}

procedimiento TMyThread.Update;
comenzar
//
fin;

procedimiento TMyThread.Execute;
comenzar
repetir
Sleep (100);
Sincronizar (actualizar);
hasta terminado
fin;

procedimiento TMainForm.FormCreate (Sender: TObject);
comenzar
MyThread: = TMyThread.Create (false);
Timer1.Interval: = 1;
Timer1.Enabled: = true;
fin;

procedimiento TMainForm.FormClose (Sender: TObject; var Action: TCloseAction);
comenzar
Timer1.Enabled: = false;
si MyThread.Suspended entonces MyThread.Resume;
MyThread.Terminate;
MyThread.WaitFor;
MyThread.Free;
fin;

procedimiento TMainForm.Timer1Timer (Sender: TObject);
comenzar
si no es MyThread. Suspendido, luego MyThread. Suspendido de lo contrario, My Thread.
fin;

Todo esto es necesario para esto: hice un botón animado: lo apuntas con el mouse - la secuencia comienza a reproducirse, reproduce la animación, quitas el mouse - el flujo se detiene. El usuario puede llevar el mouse con bastante frecuencia, por lo que esto conduce al problema anterior.
Mi programa no puede usar el temporizador en lugar de las secuencias.
Si alguien te dice cuál es el problema, le daré mis mejores componentes (incluido un botón animado). Lo juro solemnemente.
Pido disculpas por la larga pregunta, pero en resumen no puede ser.
Delphi6, Win98.
Gracias.



paul_shmakov   (2001-12-16 02:06) [1]

el uso de suspender / reanudar no es la mejor solución en este caso. Y el uso del flujo para cada botón también es malo. pero una vez que necesita una transmisión, entonces por qué no hacerlo más fácil: cuando surge la necesidad de comenzar a reproducir la animación, establecemos la bandera, el método de ejecución comprueba esta bandera y, si está establecida, dibuja la animación. Cuando el cursor se ha ido, restablecemos esta bandera.
Lo único que no hubo problemas, la bandera debe cambiarse llamando a una de las funciones de Enclavamiento *. por ejemplo, InterlockedIncrement / InterlockedDecrement.

"Me disculpo por la larga pregunta, pero de ninguna manera puede ser".
Todas las preguntas serían tan largas y detalladas :)



Páginas: 1 rama entera

Foro: "Principal";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

arriba





Memoria: 0.55 MB
Tiempo: 0.02 c
14-22396
Esmerejón
2001-11-02 09:54
2002.01.08
¡Hoy es un día feliz! Además de eso, el viernes ...


1-22261
bk
2001-12-17 15:42
2002.01.08
Excel


1-22055
walker_ag
2001-12-19 03:27
2002.01.08
¿Cómo hacer esto?


3-21912
Sergei N.
2001-12-04 06:23
2002.01.08
Manejo de fechas desde IB hasta Delphi y viceversa.


14-22393
Felix
2001-11-08 21:54
2002.01.08
¿Qué hacer?





africaans albanés Arabic armenio Azerbaiyán vasco Bielorruso Bulgarian Catalán Chino (simplificado) Chino (tradicional) Croata Checo Danés Dutch Inglés Estonia filipina Finnish French
gallego georgiano Alemán Griego criollo haitiano Hebreo hindi Húngaro islandés Indonesian irlandés Italiano Japonés Korean letón lituano macedonio Malay maltés Noruego
persa polaco Portuguese Rumano Ruso Serbio Slovak Esloveno Español swahili Sueco Thai turco ucranio Urdu vietnamita galés yídish bengalí bosnio
cebuano esperanto gujarati hausa hmong igbo javanés kannada khmer lao latín maorí marathi mongol nepali punjabi somalí Tamil telugu yoruba
zulú
Английский Francés Alemán Italiano portugués Русский Español