![]() |
Re: 1 Datei und 2 Prozesse ...
Zitat:
Aber der ganze Beitrag dreht sich doch darum das dies doch alle 20s notwendig sein kann? Und wenn das notwendig ist und alle Webseite-Threads durch die TCriticalSection darauf warten müssen, ist es auch egal durch welchen Thread dies ausgelöst wird. |
Re: 1 Datei und 2 Prozesse ...
Moin !
Die Grafik wird im Sekundentakt upgedatet. Das ist das was die Anwendung eben im Normalfall tut - Kurven plotten. Zitat:
Und weil das TChart die Grafik neu zeichnet wenn man neue Punkte einträgt, muss ich nach dem Eintragen irgendwann mal die Grafik speichern. Mache ich das aus dem Webthread raus, dann kann es sein das die Seite unvollständig gespeichert wird weil sie eben zum Zeitpunkt der JPG Erstellung noch nicht komplett gezeichnet war. Zitat:
|
Re: 1 Datei und 2 Prozesse ...
Dann ist das Hauptproblem das du Daten halten und Darstellung nicht trennst.
Aber wenn es für deinen Anwendungsfall reicht... |
Re: 1 Datei und 2 Prozesse ...
ich hätte es eher so gemacht,
dann sind die Grafiken nicht so lange blockiert
Code:
oder gar so
Webseite-Thread:
- Enter DatenSection - Prüfen letzter Grafikerstellungszeitpunkt und ob Daten neue Daten vorhanden, wenn erforderlich - [b]Daten lesen[/b] - [b]Grafik erstellen[/b] - Enter GrafikSection schreiben - [b]Grafik speichern[/b] - Schreiben Grafikerstellungszeitpunkt - Exit GrafikSection schreiben - Exit DatenSection - Enter GrafikSection lesen - Grafik lesen - Exit GrafikSection lesen
Code:
Webseite-Thread:
- Enter DatenSection - Prüfen letzter Grafikerstellungszeitpunkt und ob Daten neue Daten vorhanden, wenn erforderlich - [b]Daten lesen[/b] - Exit DatenSection - [b]Grafik erstellen[/b] - [b]Enter GrafikSection schreiben[/b] - [b]Grafik speichern[/b] - [b]Schreiben Grafikerstellungszeitpunkt[/b] [color=silver]- [b]Exit GrafikSection schreiben[/b] - Enter GrafikSection lesen[/color] - Grafik lesen - Exit GrafikSection lesen |
Re: 1 Datei und 2 Prozesse ...
Ich hätte überlegt, vor dem Bildupdate kurz die index.html zu ersetzen.
"...wait" und refresh, jede Sekunde Wenn ein Browser in dem Moment des Bilderupdates seine Darstellung aktualisiert, muss er gar nicht auf das Bild zugreifen und wartet 1 Sekunde. Dann das Bild neu speichern und die normale index.html zurückschreiben. Der nächste Browser-Refresh zeigt das wieder Bild an. ... Ach so, der letzte "zulässige" Bildzugriff kann natürlich immer noch Schreibkonflikte verursachen. Dann sollte man den Schreibversuch einfach nochmal wiederholen. Stahli |
Re: 1 Datei und 2 Prozesse ...
Darf ich fragen, um was für ein System es sich hier handelt? Ab Windows Vista bzw. Server 2008 gibt es Transactional NTFS, damit ist das ganze am einfachsten gelöst.
|
Re: 1 Datei und 2 Prozesse ...
Konflikte zwischen schreibender Instanz und mehreren lesenden Instanzen lassen sich nur komplett vermeiden, wenn wirklich alle zugreifenden Threads über eine CriticalSection synchronisiert werden. Soweit ich das verstanden habe, hast du das für die ClientThreads jetzt erreicht. Allenfalls der schreibende Prozess könnte jetzt noch dazwischenfunken.
Mein Lösungsansatz wäre, die neue Datei mit einem anderen Namen zu erstellen und dann dem Web-Server (z.B. über eine WebService-Methode oder den Aufruf einer virtuellen Website) mitzuteilen, dass die neue Datei da ist und er sie umkopieren kann. Natürlich synchronisiert über dieselbe CriticalSection, die auch die ClientThreads nutzen. Damit sind dann alle Zugriffe auf die Datei in einer Hand. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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-2025 by Thomas Breitkreuz