Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 2.118 pregleda

Najnovija ↓

Zatvaranje programa 29.01.2017. u 23:38 · pre 118 meseci #1
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?


Re: Zatvaranje programa 30.01.2017. u 02:35 · pre 118 meseci #2
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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Zatvaranje programa 30.01.2017. u 08:42 · pre 118 meseci #3
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.
Potpis
Nikad izvini!
Re: Zatvaranje programa 31.01.2017. u 20:37 · pre 118 meseci #4
Franjo pogledaj PM kada stigneš :)
Potpis
F
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme