AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Form reagiert nicht während idftp1.get trotz application.processmessages
Thema durchsuchen
Ansicht
Themen-Optionen

Form reagiert nicht während idftp1.get trotz application.processmessages

Ein Thema von gee21 · begonnen am 12. Jul 2014 · letzter Beitrag vom 15. Jul 2014
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#21

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 19:25
Nun dann solltest du beten, dass du die Form niemals umbenennst und den Thread nur einmal erzeugst ...
Ok, vielleicht ändere ich es dann doch noch lieber. Danke

Aber ich habe jetzt den Thread 3-4 mal im selben Programmstart aufgerufen und es klappt tiptop.
Dann erzeuge doch mal direkt 2 Instanzen von dem Thread und schau dir an, was dabei rauskommt.

Bzw. zeig doch mal den Code, wie du den Thread "aufrufst" ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#22

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 19:47
Also will mich jetzt wirklich nicht quer stellen. Aber wo hast du nun diesen Code drinn? In dem neuen Thread? oder auf der zB Form1?
Häää?

Das ist der "Thread"...
Auf der Form? Das ist nix zum draufklicken... Nur aufrufen...


Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#23

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 19:55
Du darfst Form1.IdFtp1.Get() NICHT in deinem Thread aufrufen, weil du sonst die Funktion im Hauptthread der Anwendung aufrufst (TForm1 ) und diese dort auch ausgeführt wird. Das heisst dass dein Thread in dem Moment garkeinen Sinn mehr hat.
Wie kommst Du den darauf?
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 20:01
@SirRufo

So ruf ich ihn auf (in einem Button)
geetest.Create(False); Und das ist der komplette Thread

Delphi-Quellcode:
unit threadtest;

interface

uses
  System.Classes, f1diashow,f4einstellungendiashow, System.SysUtils;

type
  geetest = class(TThread)
  protected
    procedure Execute; override;
  end;


implementation


procedure vclsettings;
begin
                  form1.Image1.Visible:=true;
                  form1.Image1.Bitmap.LoadFromFile(playlist[0]);
                  form1.image1.Height:=form1.Height;
                  form1.image1.Width:=form1.Width;
                  form1.image1.Position.X:=0;
                  form1.image1.Position.Y:=0;
                  count:=0;
                  form1.speedbutton1.Visible:=false;
                  form1.speedbutton3.Visible:=false;
                  form1.listbox1.Visible:=false;
                  form1.Panel2.Visible:=false;
                  form1.Timer1.Enabled:=true;
                  form1.speedbutton2.Visible:=true;
                  form1.label3.Visible:=false;
                  form1.progressbar1.Value:=0;
end;



procedure geetest.Execute;
var
i4: integer;
begin
  NameThreadForDebugging('threadgee');
  { Place thread code here }


  if filelistFINAL.Count>form4.SpinBox2.Value-1 then form1.progressbar1.Max:=form4.SpinBox2.Value else form1.progressbar1.Max:= filelistFINAL.Count;

  for i4 := 0 to filelistFINAL.Count-1 do begin

          if stop=false then begin
          form1.progressbar1.value:=i4+1;

                  try
                  form1.idftp1.get(filelistFINAL[i4],gethomepath+'/Temp/'+filelistFINAL[i4], true);
                  except
                  end;

          PlayList.add(gethomepath+'/Temp/'+filelistFINAL[i4]);

          //Während des Downloads wird die DIASHOW gestartet (ja nach Puffer Grösse)
  if form1.Timer1.Enabled=false then begin

           if filelistfinal.Count>form4.SpinBox2.Value-1 then begin
                  //SOFERN playlist grösser ist als der Puffer
                  if PlayList.Count>form4.spinbox2.value-1 then begin
                  form1.progressbar1.value:=i4+1;
                  form1.timer1.interval:=strtoint(form4.SpinBox1.text)*1000;
                   Synchronize(vclsettings);
                  end;

               // ist die FileListFINAL kleiner als der Puffer und aber mindestens 1 Bild geladen
         end else if playlist.count>-1 then begin
                  form1.progressbar1.value:=i4+1;
                  form1.timer1.interval:=strtoint(form4.SpinBox1.text)*1000;
                  Synchronize(vclsettings);
                  end;


          end;
      end else begin
       //Schlaufe wir abgebrochen da Boolean STOP=TRUE ist
      form1.timer1.Enabled:=false;
      form1.image1.Bitmap:=nil;
      form1.speedbutton1.Visible:=true;
      form1.speedbutton3.Visible:=true;
      form1.listbox1.Visible:=true;
      form1.image1.Visible:=false;
      form1.label3.Visible:=true;
      form1.speedbutton2.Visible:=false;
      form1.panel2.Visible:=false;

       break;

      end;

end;

end;
end.







@ Mavarik:

Ja habe eben bis heute noch nie mit einem Thread gearbeitet. (Wie du wahrscheinlich sehr gut am meinem oben erkennen kannst).



@nuclearping

Irgendeinen Unterschied macht es schon. den so friert die form1 nicht mehr ein.
Robert
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 20:16
Ich weiß nicht wo ich da anfangen soll ... ok, da ist irgendwie alles falsch, was man falsch machen kann.
  • Exception-Handling
  • Zugriff über form1
  • Zugriff vom Thread-Kontext auf den MainThread-Kontext
  • if stop = false ist noch der harmloseste, warum nicht if not stop ?

Die Funktion kommt glücklicherweise zustande und unglücklicherweise tut da tatsächlich was, so dass du denkst, so kann man das ruhig machen.

Ein Tutorial zum Thema Threadding und Grundlagen zum Threadding allgemein wären dringend angebracht, wenn du ernsthaft mit Threads arbeiten möchtest. Das ist allerdings der Ritt auf Messers Schneide ohne Gurt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 20:25
ok. Muss mich da mal komplett informieren. Bis heute bin ich immer ohne Threads ausgekommen.

Danke
Robert
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#27

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 20:56
Wie kommst Du den darauf?
Was?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 14. Jul 2014, 11:02
Wie kommst Du den darauf?
Was?
Du darfst Form1.IdFtp1.Get() NICHT in deinem Thread aufrufen, weil du sonst die Funktion im Hauptthread der Anwendung aufrufst
Der Zugriff auf eine Variable (hier Form1) regelt doch nicht in welchem Thread etwas ausgeführt wird...

Das ich die Erzeugung von IdFtp1 im Thread für besser halte, lassen wir mal außen vor...

Das es ggf. Probleme geben kann, falls Form1 schon weg ist auch...

Funktionieren würde es trotzdem!

Mavarik
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#29

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 14. Jul 2014, 12:22
Ein Beispiel aus dem Leben:

Jedes Auto ist ein eigener Thread und jedes Auto kann völlig unabhängig voneinander fahren.
Schlechtes Beispiel...
Da stand einer noch nie im Stau!...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 14. Jul 2014, 14:40
Ein Beispiel aus dem Leben:

Jedes Auto ist ein eigener Thread und jedes Auto kann völlig unabhängig voneinander fahren.
Schlechtes Beispiel...
Da stand einer noch nie im Stau!...
Wieso kannst du im Stau nicht fahren? Hast du schon mal versucht im Stau einfach aufs Gas zu drücken? Das Auto bewegt sich, der Stau ist dem Auto erst mal völlig egal (oder woher kommen die ganzen Auffahrunfälle im Stau?)

Oder meinst du etwa nicht fahren dürfen bzw. nicht fahren sollen?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz