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.56 MB
Tiempo: 0.022 c
4-22482
Poni
2001-11-01 10:06
2002.01.08
WinExec o ShellExecute


1-22032
Socol
2001-12-18 10:01
2002.01.08
Monopulation de números.


1-22177
Corte
2001-12-21 09:38
2002.01.08
¿Por qué no trabajar bryaki en


1-22100
Avol
2001-12-15 18:29
2002.01.08
¿Cómo en Delphi hacer una tabla de registros para el juego?


4-22455
Maamed
2001-10-31 10:13
2002.01.08
Activar otra ventana de programa





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 Francés
gallego georgiano Alemán Griego criollo haitiano hebreo hindi Húngaro islandés Indonesian irlandés Italiana 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