Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: wann wird die Message-Loop angehalten?

  Alt 20. Dez 2014, 17:20
Eine Message-Loop (die Abarbeitugsprozedur) hat nicht jeder Prozess
und andere Prozesse haben auch gern mal Mehrere davon.

Aber grundsätzlich kann jeder Thread eine Message-Queue bekommen.
Diese wird automatisch erstellt, sobald die erste Message an den Thread gesendet wird, bzw. wenn die erste Komponente (Window) in dem Thread erstellt wird.

In Delphi hat "standardmäßig" nur der Hauptthread eine Message-Behandlung, welche durch die VCL in der TApplication-Instanz behandelt wird (Application.Run, Application.ProcessMessages usw.),
aber es ist dennoch möglich auch in anderen Threads andere Messages zu behandeln.


Warum es manchmal hängen bleibt, vorallem gern beim Verschieben von Fenstern, auch bei der Konsole, ist halt eines der Mysterien.

Aber wenn der Thread nicht durch die VCL hängen bleiben darf, dann mußt du halt dein Konzept verändern/anpassen.
Einige Lösungen:
  • Der Thread übergibt nicht die Daten, sondern die GUI/Hauptthread holt sich die Daten ab. (eventuelles Hängenbleiben umgedreht)
  • Man gibt die Daten asynchron an VCL/Thread weiter. (eigene Queue, Events, Pipes, Windows-Message senden, oder Sonstwas, und nicht auf die Behandlung warten ... PostMessage<>SendMessage)
  • Beim Senden wird mit Timeout gearbeitet, damit es nicht zu lange hängt, und versucht es dann halt später nochmal.
  • ...
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (20. Dez 2014 um 17:27 Uhr)
  Mit Zitat antworten Zitat