AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Threads / Synchronize - zeitkritisch?
Thema durchsuchen
Ansicht
Themen-Optionen

Threads / Synchronize - zeitkritisch?

Ein Thema von APP · begonnen am 17. Sep 2003 · letzter Beitrag vom 17. Sep 2003
Antwort Antwort
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:03
Hallo,


ich habe eine Verständnisfrage :


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:
MainThread (Hauptprogramm) // von hier aus wird auch Thread (WatchDir) gestartet
        |
        |
        |
  Ändere(Liste)          // Liste wird verarbeitet, z.B. mit AVL-Tree verglichen
                          // und weggespeichert
Meine Frage ist nun, was passiert, wenn z.B. n=1 ist und diese eine Zeile der
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?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:08
Synchronize verwendet PostMessage und solange wie du keine Nachrichten wärend der Änderungen abfragst geht es seinen gang.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:40
Hallo neolithos,

Zitat von neolithos:
Synchronize verwendet PostMessage und solange wie du keine Nachrichten wärend der Änderungen abfragst ...
meinst Du mit "Nachrichten", die Messageque von Windows?

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 von neolithos:
...geht es seinen gang.
Gibt es Grenzen, z.B. ein Timeout, wenn "etwas zu Lange dauert"?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:43
Zitat von APP:
Hallo neolithos,

Zitat von neolithos:
Synchronize verwendet PostMessage und solange wie du keine Nachrichten wärend der Änderungen abfragst ...
meinst Du mit "Nachrichten", die Messageque von Windows?
Ja!

Zitat von APP:
Gibt es Grenzen, z.B. ein Timeout, wenn "etwas zu Lange dauert"?
Es gibt kein TimeOut da PostMessage die Nachricht hinten an stellt und das wars auch schon.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:49
Hallo neolithos,

vielen Dank für Deine Antworten und Deine Geduld, aber eine Frage hätte ich noch :
Zitat:
solange wie du keine Nachrichten wärend der Änderungen abfragst
bedeutet das, dass wenn mein Thread per PostMessage() etwas (anderes)
an einen anderen Thread versendet dann die MessageQue "zerstört" wird?.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 12:53
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 13:12
Vielen Dank neolithos,

ich glaube, jetzt hab ich es *fast* begriffen!

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 ....
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#8

Re: Threads / Synchronize - zeitkritisch?

  Alt 17. Sep 2003, 13:53
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  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 15:46 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