[ FranjoZG @ 29.01.2017. 22:38 ] @
Delphi 10.1 Berlin Radmin program koji koristi task-ove i pristupa bazama podataka. Svaki task radi sinhronizaciju lokalnih podataka (FB) sa web-om (MySQL). Svaki task ima svoju konekciju (definiranu u tasku), koristim TFDConnection. Taskovi se izvrše. Pritisnem na "Close" main forme, forma nestane s ekrana, ali u procesima se i dalje vidi program. procedura pokretanja taskova: Code: a1 := tMyThreadAdresar.Create(fmMain); // tMyThreadAdresar je klasa definirana u drugom unit-u ... tt[1] := TTask.Create (procedure () begin a1.ime := 'a1'; a1.MainProcedure := CountActivThread; a1.ErrorProcedure := ErrorThread; a1.Log := self.Log; a1.Params := Param; a1.Name := 'a1'; a1.Execute; end); .. // tako 4 puta tt[1] .. tt[4] tt[1].Start; tt[2].Start; tt[3].Start; tt[4].Start; while not TTask.WaitForAll(tt, 1) do begin // process any pending TThread.Synchronize() and TThread.Queue() requests CheckSynchronize(0); // process any pending UI paint requests, but not other messages Application.MainForm.Update; // or make it more responsive Application.ProcessMessages; end; if (tt[1].Status <> TTaskStatus.Completed) or (tt[2].Status <> TTaskStatus.Completed) or (tt[3].Status <> TTaskStatus.Completed) or (tt[4].Status <> TTaskStatus.Completed) then showmessage('nije gotovo') else begin ShowMessage('gotovo 1'); end; Program uredno ispiše "gotovo 1" Nakon toga close forme i ostane visjeti u procesima. Ako ga pokrečem iz Delphi-a, moram koristiti "Program reset" mada forma programa nestane. Probao sam i bez WaitForAll - ista situacija. U čemu je štos? |