casa
Top.Mail.Ru Yandeks.Metrika
Forum: "Principale";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

giù

Discussione: Sospendi / Riprendi e sincronizza Trova rami simili


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

Cari colleghi, aiutatemi, non ho ancora dormito notti 3.
Il problema è:
Se si sospende (sospendi) frequentemente e si avvia (riprendi) il thread che chiama Synchronize, quindi quando si ridisegna la finestra, il programma si blocca spesso.
Ad esempio, se si esegue il seguente programma e si passa da esso a Delphi, l'applicazione seguente rimarrà silenziosa per sempre:

usa
Windows, Messaggi, SysUtils, Classi, Grafica, Controlli, Moduli,
Dialoghi, ExtCtrls, StdCtrls, ComCtrls;

Digitare

TMyThread = class (TThread)
privato
aggiornamento della procedura;
protetta
procedura Esegui; ignorare;
fine;

TMainForm = class (TForm)
Timer1: TTimer;
procedura FormCreate (Sender: TObject);
procedura FormClose (Sender: TObject; var Action: TCloseAction);
procedura Timer1Timer (Sender: TObject);
privato
{Dichiarazioni private}
MyThread: TMyThread;
pubblico
{Dichiarazioni pubbliche}
fine;

var
MainForm: TMainForm;

implementazione

{$ R * .dfm}

procedura TMyThread.Update;
iniziare
//
fine;

procedura TMyThread.Execute;
iniziare
ripetere
Sleep (100);
Sincronizzazione (aggiornamento);
fino alla fine;
fine;

procedura TMainForm.FormCreate (Sender: TObject);
iniziare
MyThread: = TMyThread.Create (false);
Timer1.Interval: = 1;
Timer1.Enabled: = true;
fine;

procedura TMainForm.FormClose (Sender: TObject; var Action: TCloseAction);
iniziare
Timer1.Enabled: = false;
se MyThread.Suspended then MyThread.Resume;
MyThread.Terminate;
MyThread.WaitFor;
MyThread.Free;
fine;

procedura TMainForm.Timer1Timer (Sender: TObject);
iniziare
se non è MyThread Sospeso poi MyThread Sospendi else My Thread.
fine;

Tutto ciò è necessario per questo: ho creato un pulsante animato: lo punti con il mouse - il flusso inizia a suonare, riproduce l'animazione, rimuovi il mouse - il flusso si ferma. L'utente può portare il mouse abbastanza spesso, quindi questo porta al problema precedente.
Nel mio programma, non è possibile utilizzare il timer al posto degli stream.
Se qualcuno ti dice qual è il problema, gli darò i miei migliori componenti (incluso un pulsante animato). Giuro solennemente.
Mi scuso per la lunga domanda, ma in breve non può essere.
Delphi6, Win98.
Grazie.



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

usare sospendere / riprendere non è la soluzione migliore in questo caso. E l'uso di un flusso per ogni pulsante è anche male. ma una volta che hai bisogno di uno stream, perché non renderlo più semplice: quando sorge la necessità di iniziare a riprodurre l'animazione, impostiamo il flag, il metodo execute controlla questo flag e, se è impostato, disegna l'animazione. quando il cursore è sparito, ripristiniamo questo flag.
l'unica cosa che non c'erano problemi, la bandiera dovrebbe essere cambiata chiamando una delle funzioni Interlocked *. ad esempio, InterlockedIncrement / InterlockedDecrement.

"Mi scuso per la lunga domanda, ma in nessun modo può essere."
tutte le domande sarebbero così lunghe e dettagliate :)



Pagine: 1 tutto il ramo

Forum: "Principale";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

al piano di sopra









Memoria: 0.82 MB
Ora: 0.026 c
1-22067
DNT
2001-12-15 16:20
2002.01.08
Finestra di dialogo e dll


1-22066
Andrey Senchenko
2001-12-19 10:53
2002.01.08
Tipi. Oppure aiuta a leggere HELP


1-22187
Mitry
2001-12-15 02:53
2002.01.08
Discussione: Sospendi / Riprendi e sincronizza


1-22105
Gonza
2001-12-19 16:35
2002.01.08
Applicazione MDI ???


1-22216
Ghost_Old.
2001-12-16 14:43
2002.01.08
Aiuto .. chi sa come ottenere la data di domani ..





afrikaans albanese Arabic armeno Azero basco bielorusso Bulgarian catalano Cinese (semplificato) Cinese (tradizionale) croato Ceco danese Dutch Inglese estone filippina Finnish Francese
galiziano georgiano Tedesco greco Creolo haitiano ebraico hindi ungherese islandese Indonesian irlandese Italiano Giapponese Korean lettone lituano macedone Malay maltese Norwegian
persiano polacco Portoghese rumeno Russian serbo Slovak sloveno Spagnolo swahili Swedish Thai turco ucraino Urdu vietnamita gallese yiddish bengalese bosniaco
Cebuano esperanto Gujarati Hausa Hmong Igbo giavanese kannada khmer lao latino maori marathi mongolo nepali punjabi somalo tamil telugu Yoruba
zulù
Английский Francese tedesco italiano portoghese russo spagnolo