Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zatvaranje programa

[es] :: Pascal / Delphi / Kylix :: Zatvaranje programa

[ Pregleda: 1038 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 242
*.dsl.iskon.hr.



+2 Profil

icon Zatvaranje programa29.01.2017. u 22:38 - pre 42 meseci
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?


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2635



+69 Profil

icon Re: Zatvaranje programa30.01.2017. u 01:35 - pre 42 meseci
Odakle pozivas ovu metodu?

Uglavnom, problem je sto ti ostaju aktivni threadovi, sad ne znam da li su to ovi taskovi ili neki drugi.
Mozes downloadovati SysInternals ProcExplorer (TaskManager sa dosta vise mogucnosti), startujes ga i selektujes tvoj proces pa pogledas threadova pre nego startujes taskove, vidis koji se naprave, potom radis u programu, zatvoris ga i pogledas koji threadovi su ostali zivi.
 
Odgovor na temu

salvaric
Novi Sad

Član broj: 53995
Poruke: 192
93.86.2.*



+4 Profil

icon Re: Zatvaranje programa30.01.2017. u 07:42 - pre 42 meseci
Pokušaj da ukloniš
Code:
 Application.ProcessMessages;
meni je to pravilo probleme u radu sa Thread-ovima.

Prebaci događaj na neki "Button" da ne gasiš program, pokreni View->Debug Windows->Threads i pokreni program, prati thread-ove nakon pritiska na "Button" i isprati dal ti se svaki uklonio nakon izvršenja.
Nikad izvini!
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Zatvaranje programa31.01.2017. u 19:37 - pre 42 meseci
Franjo pogledaj PM kada stigneš :)
F
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Zatvaranje programa

[ Pregleda: 1038 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.