Auf Thread warten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Auf Thread warten

Beitrag von Eclipticon »

Hi,

damit mein GUI waehrend einer laengeren Operation responsive bleibt, lagere ich diese Berechnung in einen Thread aus. Ich frag mich jetzt, wie ich im Main Thread optimal auf das Ende dieses Threads warte ...

Code: Alles auswählen

// Done ist ein von mir definiertes Flag
while (not AThread.Done) do
Application.ProcessMessages:

funktioniert (aus Sicht des GUI) ganz gut ...

Code: Alles auswählen

AThread.WaitFor


nicht so gut ...

Was ist das empfohlene Vorgehen?

Danke und schoenes Wochenende!

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Auf Thread warten

Beitrag von theo »

Warum loopen zum warten?
TThread kann doch OnTerminate auslösen wenn er fertig ist.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Auf Thread warten

Beitrag von mschnell »

Im Mainthread sollte man (fast) nie auf irgendetwas warten. Alle Aktionen sollten in Events stattfinden, die so schnell wie möglich wieder beendet (verlassen) werden. Halte Dich also an Theos Vorschlag.

-Michael

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Auf Thread warten

Beitrag von carli »

Wie mschnell schon angedeutet hat: Nicht im Hauptthread warten.
Du kannst mit Synchronize die entsprechende Aktion im Haupt-Thread ausführen.

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Auf Thread warten

Beitrag von Eclipticon »

Danke, die Message ist angekommen ... und mittlerweile habe ich mich auch von dem Knoten in meinem Hirn befreit, der mir gesagt hat, es waere mit OnTerminate nicht machbar.

carli hat geschrieben:Du kannst mit Synchronize die entsprechende Aktion im Haupt-Thread ausführen.


Welche Aktion genau meinst du damit, Carli?

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Auf Thread warten

Beitrag von theo »

Eclipticon hat geschrieben:Welche Aktion genau meinst du damit, Carli?


Brauchst du wahrsch. nicht. Nur wenn du aus dem Thread was im Hauptthread machen willst (Progressbar etc.)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Auf Thread warten

Beitrag von mschnell »

Eclipticon hat geschrieben:Welche Aktion genau meinst du damit, Carli?

Sicherlich eben die nächste , die Deine Anwendung nach Beenden der Threads machen soll. (Das nennt man Ereignisorientierte Programmierung ( http://de.wikipedia.org/wiki/Ereignis_% ... rammierung ) und so sollte der Mainthread eines Lazarus-Programms grundsätzlich arbeiten. Bei Lazarus ergeben sich durch Ereignisorientierte Programmierung übrigens keine Probleme durch konkurrierende Zugriffe auf Variablen. . Die gibt es nur bei Threads.

-Michael

Antworten