AGB  ·  Datenschutz  ·  Impressum  







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

ProgressBar + Thread = Fehler

Ein Thema von FAlter · begonnen am 9. Aug 2009 · letzter Beitrag vom 9. Aug 2009
Antwort Antwort
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: ProgressBar + Thread = Fehler

  Alt 9. Aug 2009, 17:55
[quote="FAlter"]ProgressForm.ProgressBar.Max := Max; //An dieser Stelle hab ich mal das SIGFPE lokalisieren können hier gibt/gab es unter Delphi oftmals Probleme, wenn .Max auf einen kleineren Wert gesetzt wird, als wie .Potition grad ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

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

Re: ProgressBar + Thread = Fehler

  Alt 9. Aug 2009, 18:08
Hi,

das Setzen der Position hat nichts gebracht:

Zitat:
Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0xb7a70ad0 (LWP 5864)]
0xb7d30ac3 in ?? () from /usr/lib/libgtk-1.2.so.0
(gdb) backtrace
#0 0xb7d30ac3 in ?? () from /usr/lib/libgtk-1.2.so.0
#1 0xb7d313fe in ?? () from /usr/lib/libgtk-1.2.so.0
#2 0xb7d2e1a6 in ?? () from /usr/lib/libgtk-1.2.so.0
#3 0xb7d0db06 in gtk_marshal_NONE__NONE () from /usr/lib/libgtk-1.2.so.0
#4 0xb7d420a2 in ?? () from /usr/lib/libgtk-1.2.so.0
#5 0xb7d4473f in ?? () from /usr/lib/libgtk-1.2.so.0
#6 0xb7d449e2 in gtk_signal_emit_by_name () from /usr/lib/libgtk-1.2.so.0
#7 0xb7d2f3f7 in gtk_progress_configure () from /usr/lib/libgtk-1.2.so.0
#8 0x08216933 in TGTKWSPROGRESSBAR__APPLYCHANGES (APROGRESSBAR=0xb7a36a10,
pvmt=0xb78c4b90) at gtkwscomctrls.pp:312
#9 0x080e9178 in TCUSTOMPROGRESSBAR__APPLYCHANGES (this=0xb7a36a10)
at progressbar.inc:263
#10 0x080e8f12 in TCUSTOMPROGRESSBAR__SETMAX (VALUE=0, this=0xb7a36a10)
at progressbar.inc:163
#11 0x0807dfed in TFOTOLOADER__STARTPROGRESS (this=0xb78ba9d0)
at uloadfotos.pas:65

#12 0x0809339c in CLASSES_CHECKSYNCHRONIZE$LONGINT$$BOOLEAN ()
#13 0x081d8c14 in THREADSYNC_IOCALLBACK (SOURCE=0x9831260, CONDITION=1,
DATA=0xb7f0f150) at gtkwidgetset.inc:625
#14 0xb7eea244 in ?? () from /usr/lib/libglib-1.2.so.0
#15 0xb7eebbfd in ?? () from /usr/lib/libglib-1.2.so.0
#16 0xb7eec45f in ?? () from /usr/lib/libglib-1.2.so.0
#17 0xb7d0cb36 in gtk_main_iteration_do () from /usr/lib/libgtk-1.2.so.0
---Type <return> to continue, or q <return> to quit---
#18 0x081d982f in TGTKWIDGETSET__APPPROCESSMESSAGES (this=0xb7f0f150)
at gtkwidgetset.inc:1187
#19 0x08079fb9 in TAPPLICATION__HANDLEMESSAGE (this=0xb78b2010)
at application.inc:984
#20 0x0807a2ef in TAPPLICATION__RUNLOOP (this=0xb78b2010)
at application.inc:1095
#21 0x08083dd3 in TWIDGETSET__APPRUN (ALOOP=0x807a2b0 <TAPPLICATION__RUNLOOP>,
this=0xb7f0f150) at interfacebase.inc:49
#22 0x0807a2aa in TAPPLICATION__RUN (this=0xb78b2010) at application.inc:1082
#23 0x080546a2 in main () at falterfotomanager.lpr:18
(gdb)
Zeile 65 ist jetzt da wo auf 0 gesetzt wird. Warum dafür setmax aufgerufen wirs kann ich mir nicht erklären, ich dachte ich hätte "Alles neu compilieren" gewählt und Lazarus hat am ende "Projekt erfolgreich gebaut " gemeldet. [edit] Vergiss es, es war die Zeile mit Max, ich hab mich verguckt. Aber Max war 4 und Position hatte ich gerade auf 0 gesetzt, hätte aber auch 0 sein müssen weil es noch nie geändert wurde. [/edit]

Ein drittes Phänomen ist, dass sich der Thead plötzlich unerwartet beendet und auch nicht vorher den except Block abarbeitet.

Gruß
Felix
Felix Alter
  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 16:53 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