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
gee21

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

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

  Alt 13. Jul 2014, 19: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
 
#2

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

  Alt 13. Jul 2014, 19: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
 
#3

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

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

Danke
Robert
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz