![]() |
Threads / Synchronize - zeitkritisch?
Hallo,
ich habe eine Verständnisfrage :shock: : Folgendes Problem:
Code:
THREAD (WatchDir) // überwache LW mit ReadDirectoryChangesW
| | z.B. | wenn n=1 dann, // n = Anzahl der Zeilen in Liste Synchronize(Liste) // Änderungen am LW werden in Liste geschrieben, // nach n Änderungen wird Liste an MainThread übergeben
Code:
Meine Frage ist nun, was passiert, wenn z.B. n=1 ist und diese eine Zeile der
MainThread (Hauptprogramm) // von hier aus wird auch Thread (WatchDir) gestartet
| | | Ändere(Liste) // Liste wird verarbeitet, z.B. mit AVL-Tree verglichen // und weggespeichert Liste an den MainThread weitergegeben wird. Was geschieht, wenn die Verarbeitung der Liste [Ändere(Liste)] länger dauert, und inzwischen vom Thread eine neue Listen-Änderung kommt. Geht diese Änderung nun verloren, oder übernimmt das MessageSystem von Windows die korrekte Abwicklung? Falls das MessageSystem die korr. Abwicklung übernimmt, gibt es mögliche Grenzen? Mit anderen Worten, ist das Ändere(Liste) zeitkritisch, oder kann ich noch einen Suchbaum bearbeiten und die Daten wegspeichern? |
Re: Threads / Synchronize - zeitkritisch?
Synchronize verwendet PostMessage und solange wie du keine Nachrichten wärend der Änderungen abfragst geht es seinen gang.
|
Re: Threads / Synchronize - zeitkritisch?
Hallo neolithos,
Zitat:
Ich möchte schon, dass mein Thread per PostMessage() etwas (anderes) an einen anderen Thread versendet. Kann es nicht außerdem sein, dass div. Kompos nicht auch Nachrichten mit PostMessage() senden/empfangen? Zitat:
|
Re: Threads / Synchronize - zeitkritisch?
Zitat:
Zitat:
|
Re: Threads / Synchronize - zeitkritisch?
Hallo neolithos,
vielen Dank für Deine Antworten und Deine Geduld, aber eine Frage hätte ich noch :mrgreen: : Zitat:
an einen anderen Thread versendet dann die MessageQue "zerstört" wird?. |
Re: Threads / Synchronize - zeitkritisch?
Nein!
Ich meinte damit: Du darfst nicht in der Änderungsroutine Nachrichten von der Messageque abholen, solange deine Änderung erfolgt. Sonsts könnte es probleme geben, da schon wieder Änderung aufgerufen wird obwohl die erste noch nicht abgeschlossen. |
Re: Threads / Synchronize - zeitkritisch?
Vielen Dank neolithos,
ich glaube, jetzt hab ich es *fast* begriffen! :cry: 1) Solange ich in meiner Änderungsroutine die Liste abarbeite, wird sie nicht vom Thread nicht verändert (auch wenn schon wieder neue Daten da sind), erst wenn ich fertig, bin wird die Liste neu gefüllt? 2) Oder muß ich nun die Liste in der Änderungsroutine Locken (CriticalSection, TThreadList,...), damit sie verarbeitet werden kann, ohne das der Thread zwischenfunkt? Und wenn ich sie Unlocke wird das, was in der MessageQue steht weiterverarbeitet und meine List gegebenenfalls neubefüllt. p.s. Nach mehrmaligen durchlesen denke ich die 2. Annahme stimmt eher .... |
Re: Threads / Synchronize - zeitkritisch?
Das hängt von den Zugriffen der Daten ab. Änders du die Daten nur im Hauptthread oder auch im anderen Thread.
Nur Hauptthread: Locken ist unnötig. beim zweiten fall kann man sich Synchronize sparen und nur mit dem Locken arbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz