[ FranjoZG @ 24.05.2017. 13:14 ] @
Kako zaustaviti task pri gašenju programa? Kreirao sam tTask koji šalje mail-ove u pozadini programa. Nekada 1, a nekada više. Ako korisnik želi zatvorio program, a task je još aktivan - javlja grešku. Kako u main formi znati da je task aktivan i kako za zaustaviti prije nego što bi završio sav posao? Pokušao sam sa task.Cancel, ali ne radi kako treba. Imam osjećaj da iskoči iz taska prije vremena. imam: Code: procedure TfmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin fTaskMail.Cancel; fmPoruka := tfmPoruka.Create(nil); fmPoruka.lbPoruka.Caption := 'Prekid slanja mailova u tijeku...'; while AktTMail > 0 do Sleep(2000); CanClose := true; end; procedure TfmMain.SendMail; begin fTaskMail := TTask.Run(procedure () var Memo: TfrxMemoView; begin TInterlocked.Add(AktTMail, 1); ... while (Dat <= Dat1) and (TTask.CurrentTask.Status <> TTaskStatus.Canceled) do begin ... end; TInterlocked.Add(AktTMail, -1); TThread.Synchronize(nil, procedure begin TimerMail.Enabled := not(Ok) and (TTask.CurrentTask.Status <> TTaskStatus.Canceled); WriteLog('Ukupno poslano mail-ova: ' + UkBr.ToString, false); if (TTask.CurrentTask.Status = TTaskStatus.Canceled) then WriteLog('SLANJE MAIL-OVA JE PREKINUO KORISNIK: ' + UserName, false); CloseFile(LogFile); end); Nakon zatvaranja programa, fTaskMail.Cancel izazov ispadanje iz while petlje i task-a i ne dođe na naredbu: TInterlocked.Add(AktTMail, -1); Javi mi i grešku da je disconect-ana kontrola sa slanje mail-a. Varijablu AktMail koristim kako bih znao da je task pokrenut. Ona je 1 ili 0. U čemu griješim? |