![]() |
ProgressBar + Thread = Fehler
Hi,
nachdem ich mich nun vorübergehend entschieden habe, gdb direkt zu nutzen statt über Lazarus (siehe anderer Thread, Lazarus hängt das System auf???), habe ich mehr über den Fehler erfahren. Es kommt immer im Zusammenhang mit der ProgressBar und äußert sich durch ein SIGFPE Signal, wobei der Backtrace das Auftauchen dessen in irgendwelchen gtk Routinen zeigt, oder durch eine Meldung wie Gdk-ERROR **: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0. Von meinem eigenen Code ist folgendes interessant:
Delphi-Quellcode:
TFotoLoader ist ein Thread, der gestartet wurde (uses CThreads steht ganz oben in der Uses-Liste vom Programm - umgeben von ifdef unix - da Threads sonst (noch) nicht unter Linux funktionieren).
procedure TFotoLoader.ShowProgress;
begin ProgressForm.MessageText.Caption := 'Fotos werden gesucht...'; ProgressForm.ProgressLabel.Caption:='Vorbereitung...'; ProgressForm.Show; end; procedure TFotoLoader.SetProgressCaption; //In dieser Methode taucht das Gdk-ERROR gerne auf begin ProgressForm.ProgressLabel.Caption := Caption; if Max > 0 then ProgressForm.ProgressBar.StepBy(1); end; procedure TFotoLoader.StartProgress; begin ProgressForm.ProgressBar.Max := Max; //An dieser Stelle hab ich mal das SIGFPE lokalisieren können ProgressForm.MessageText.Caption := 'Fotos werden geladen...'; ProgressForm.ProgressLabel.Caption:='Vorbereitung...'; end; Die oben genannten Methoden werden nur über Synchronize(@methode) aufgerufen. ProgressForm ist eine Instanzvariable, sie wird im Konstruktor des Threads initialisiert, im Destruktor wird Release aufgerufen. Gruß Felix |
Re: ProgressBar + Thread = Fehler
[quote="FAlter"]
Delphi-Quellcode:
hier gibt/gab es unter Delphi oftmals Probleme, wenn .Max auf einen kleineren Wert gesetzt wird, als wie .Potition grad ist.
ProgressForm.ProgressBar.Max := Max; //An dieser Stelle hab ich mal das SIGFPE lokalisieren können
|
Re: ProgressBar + Thread = Fehler
Hi,
das Setzen der Position hat nichts gebracht: Zitat:
Ein drittes Phänomen ist, dass sich der Thead plötzlich unerwartet beendet und auch nicht vorher den except Block abarbeitet. Gruß Felix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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