Întrebarea nr. 6 119 ..., vă rog, cum să întrerupeți fluxul în timpul rulării în timp ce închideți formularul

Bine ai venit!
Spuneți-mi, vă rog, cum să terminați firul în timp ce lucrați în timp ce închideți formularul.

Un fișier este atașat la întrebare. Descărcați "(termen de valabilitate: 60 de zile de la data trimiterii întrebării)







Bună ziua!
Există două modalități - finalizarea și finalizarea cu perversiune. A doua metodă implică uciderea fluxului, dar în același timp uciderea lui "brutal" și nimeni nu garantează că programul principal va supraviețui. Prin urmare, această metodă nu este recomandată. (arată așa)

Calea corectă este că firul trebuie să se completeze. Pentru aceasta, implementarea thread-ului Delphi are un câmp Terminat. Fluxul ar trebui să verifice acest câmp din când în când la adevărat și, dacă da, trebuie să-și înceteze activitatea (în general, curăță doar resursele sale și cheamă la ieșire).







Și cel care are nevoie de fluxul pentru a termina, doar sună. Dar nimeni nu garantează că fluxul se va termina imediat (fluxul trebuie încă atins, verificați starea, completă). Dacă doriți să așteptați ca firul să se termine, scrieți apoi
Dar trebuie doar să înțelegeți că WaitFor este o operație de blocare și va încetini interfața (dar dacă firul se termină rapid, atunci nu există probleme).

Forum cu mini-întrebări

Completarea corectă este preferabilă.
Din nou o greșeală. Mi-e dor de ceva, dar ce?

DownLoader_Thread.FreeOnTerminate: = Adevărat; atunci nu trebuie să sunați distrugătorul firului. Deoarece Delphi se va apela pentru tine. Și din moment ce există un apel către WaitFor, până când îl veți numi pe distrugător, va fi deja chemat.

În plus, există o specificitate subtilă. Dacă FreeOnTerminate: = True este specificat, thread-ul OnTerminate este apelat în contextul firului. Și dacă este fals, atunci în contextul firului numit gratuit.

Bifarea "dovada citirii" este un rău universal.







Trimiteți-le prietenilor: