Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   1 Datei und 2 Prozesse ... (https://www.delphipraxis.net/130535-1-datei-und-2-prozesse.html)

Blup 11. Sep 2009 10:59

Re: 1 Datei und 2 Prozesse ...
 
Zitat:

Zitat von moelski
Die Grafik steht bereits und ich möchte auch nicht eine neue Grafik berechnen lassen.

Wenn die Grafik niemals neu berechnet wird, brauchts auch keine TCriticalSection.
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.

moelski 11. Sep 2009 11:04

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:

Aber der ganze Beitrag dreht sich doch darum das dies doch alle 20s notwendig sein kann?
richtig. Die Grafik verändert sich laufend und drum muss alles 20 Sekunden ein neues JPG der Grafik geschrieben werden.
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:

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.
Nicht so ganz. s.o.

Blup 11. Sep 2009 12:33

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...

himitsu 11. Sep 2009 12:37

Re: 1 Datei und 2 Prozesse ...
 
ich hätte es eher so gemacht,
dann sind die Grafiken nicht so lange blockiert
Code:
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
oder gar so
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

stahli 11. Sep 2009 13:37

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

Apollonius 11. Sep 2009 14:19

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.

fajac 11. Sep 2009 14:20

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.
Seite 3 von 3     123   

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