Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#1

ProgressBar + Thread = Fehler

  Alt 9. Aug 2009, 17:49
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:
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;
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).

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
Felix Alter
  Mit Zitat antworten Zitat