Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#44

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 14. Nov 2018, 00:32
Aber das Phänomen konnte ich bisher in realer Anwendungsumgebung bisher so nicht ausmachen.
Wenn der Thread bei mir geschlossen wird dann ist da nix mehr mit Events auch bei Queue nicht.

Wie bei meinem Mixer.. also wie soll dann der System Mixer Events an meinen Thread schicken können wenn er weg ist.
Nun er kann es versuchen, hat aber keine Auswirkung da sie nicht verarbeitet werden können bzw. kommen nicht mehr an.
Der Begriff "Event" ist hier nicht im Sinne der Windows-API oder eines Delphi-Methodenzeigers zu verstehen, sondern im wörtlichen Sinne als Ereignis, das von einem Queue-Aufruf im Thread ausgelöst und im Hauptthread abgearbeitet wird.

Wenn du innerhalb eines Threads einen Queue-Aufruf machst, dann wird der erstmal in die Warteschlange gelegt, bis der Hauptthread ihn abarbeitet. Im Gegensatz zu Synchronize arbeitet der Thread aber sofort weiter und kann sich natürlich auch beenden. Sollte das passieren bevor die Warteschlange vollständig abgearbeitet wurde, dann entfernt das TThread.Destroy noch eben schnell alle Queue-Calls aus der Warteschlange, die noch einen Verweis auf den besagten Thread haben.

Es handelt sich natürlich um eine Race Condition, was ein konkretes Beispiel schwer macht. Das Phänomen kann man aber häufig mit dem anhängenden (sinnfreien) Beispiel provozieren. Je nachdem welchen der beiden Queue-Aufrufe man verwendet kommt entweder nur ein Teil oder alle Zahlen im Memo an.
Angehängte Dateien
Dateityp: zip Projekt443.zip (1,3 KB, 6x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat