AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread wird nicht ausgeführt

Ein Thema von TheMiller · begonnen am 30. Okt 2009 · letzter Beitrag vom 30. Okt 2009
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 11:25
Hallo,

ich lasse in einer Schleife mehrere Reports drucken (bis zu 100 Stück) - hier handelt es sich um ein Mahnwesen-Plugin. Nun möchte ich, dass während dem Druck die Form2 angezeigt und ständig neu gezeichnet wird. Es ist eine "Bitte-warten"-Form mit einer UbuntuProgressBar.

Dazu habe ich einen simplen Thread gebaut. Hier mal der Code.

Delphi-Quellcode:
TRefreshThread = class(TThread)
  private

  public
    Form: TForm;
    kill: Boolean;
  protected
    procedure ShowForm;
    procedure doRefresh;
    procedure Execute; override;
  end;

procedure TRefreshThread.ShowForm;
begin
  ShowMessage('SD');
  Form2.Visible:=True;
end;

procedure TRefreshThread.doRefresh;
begin
  while not (kill) do
  begin
    Form2.Refresh;
    Form2.Repaint;
  end;
end;

procedure TRefreshThread.Execute;
begin
  ShowForm; //Fehlerbeschreibung weiter unten
  Synchronize(doRefresh); //Fehlerbeschreibung weiter unten
end;

//Aufruf:
procedure ....
var
  ...
begin
  rt:=TRefreshThread.Create(True);
  rt.kill:=False;
  rt.Form:=Form2;
  rt.Resume;
  ...
end;
Wenn ich in der Execute-Methode beide Methoden mit Synchronize aufrufe tut sich garnichts. Keine Form poppt auf, keine Message. Rufe ich eine / oder beide Methode ohne Synchronize auf, poppt Form2 und die MessageBox auf, aber erst nachdem der Druckvorgang abgeschlossen ist.

Was mache ich falsch? Das müsste doch so funktionieren?

Vielen Dank
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 11:31
dein Thread beendet sich ja sofort wieder.
[edit2] nein tut er nicht, er verharrt in der Schleife von doRefresh.

Delphi-Quellcode:
procedure TRefreshThread.Execute;
begin
  ShowForm; //Fehlerbeschreibung weiter unten
  Synchronize(doRefresh); //Fehlerbeschreibung weiter unten
end;
vielleicht funktioniert es ja so:
Delphi-Quellcode:
procedure TRefreshThread.Execute;
begin
  ShowForm; //Fehlerbeschreibung weiter unten
  while not terminated do
    begin
      Synchronize(doRefresh); //Fehlerbeschreibung weiter unten
      sleep(250);
    end;
end;

[edit]
das do refresh dann so umbauen:

Delphi-Quellcode:
procedure TRefreshThread.doRefresh;
begin
  Form2.Refresh;
  Form2.Repaint;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 11:51
ShowForm sollte aber auch synchronisiert werden, es wird ja auf die Form zugegriffen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#4

Re: Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 11:58
Ja, habe ich ja gemacht. Ich wollte damit nur zeigen, dass ShowForm nur dann aufgerufen wird, wenn ich kein Synchronize verwende. Verwende ich dieses, wird ShowForm auch nicht aufgerufen. Warum auch immer...

Ich habe die vorgeschlagene Codeänderung übernommen, und funktioniert auch nicht.

Was mir gerade einfällt. Wenn ich komplett ohne Synchronize arbeite, dann funktioniert alles. Kann das daran liegen, dass das Mahnungsmodul eine DLL-Form ist, die dynamisch vom Hauptprogramm geladen wird? Ohne Synchronize funktioniert das einwandtfrei und ohne Fehler. Kann so sogar die VCL ändern. Mit Synchronize geht es garnicht -> kein Methodenaufruf möglich.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 12:02
vielleicht magst Du dir mal diesen Thread durchlesen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Thread wird nicht ausgeführt

  Alt 30. Okt 2009, 12:05
Ok, habe ihn gelesen. Werde es genauso machen, wie siruis es vorgeschlagen hat. Allerdings schiebe ich das ein bissl auf

Vielen Dank!
  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 20:16 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