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