Autor Beitrag
woully
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78



BeitragVerfasst: Di 12.01.10 18:40 
Hi,

ich habe zwei unterschiedliche Programme die auf eine gleiche Ini Datei zugreifen.

Ein Programm Prüft alle 500 ms ob Einträge in der Datei vorhanden sind.
Das Zweite schreibt Befehle in die Datei.

Wie kann ich verhindern das beide Programme die Ini Datei zu gleicher Zeit öffnen ?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 12.01.2010 um 17:53
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 12.01.10 18:42 
Hat das nen Grund, dass du dies per Ini machst?
Man denke an erhöhte Festplattenlast und sowas.

Such mal nach Interprozesskommunikation (IPC), oder vllt. auch einfach per TCP?

_________________
PROGRAMMER: A device for converting coffee into software.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 12.01.10 18:47 
Hey,

das hab ich auch mal gemacht, aus dem Grund, das Prog 1 immer hängen geblieben is wenn es rechent und Prog 2 die GUI dazu war (da war ich noch blutiger anfänger^^). Das kann man also auch in einem Prog mit Threads machen...

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 12.01.10 20:02 
Die arme Festplatte. :shock: Versetz dich doch mal in die Lage des Lesekopfes, der inzwischen noch ein Word-Dokument öffnen will. Der tut mir echt leid. :cry:

Zur gleichen Zeit öffnen sollte eigentlich nicht möglich sein, oder? Schließlich muss die Datei ja erst wieder freigegeben werden, bevor sich das andere Programm daran machen kann. Und bei einem etwas geringeren Abstand ist das dann eher dadurch bedingt, dass die Timer synchron laufen, was wiederum über die Systemzeit geprüft werden könnte. Oder aber man lässt es ganz bleiben...
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 12.01.10 20:28 
Hey,

ich glaub bei INIs war das so, das die Datei nur geöffnet wird, wenn du sie erstellst (zum auslesen) und wenn du ein Wert schreibst. Zwischendrin ist die glaube freigegeben...

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Di 12.01.10 21:43 
user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
Die arme Festplatte. :shock: Versetz dich doch mal in die Lage des Lesekopfes, der inzwischen noch ein Word-Dokument öffnen will. Der tut mir echt leid.

Davon bekommt die Platte kaum was mit, die Zugriffe finden groesstenteils im Cache statt.

twm
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Di 12.01.10 21:46 
user profile iconwoully hat folgendes geschrieben Zum zitierten Posting springen:

ich habe zwei unterschiedliche Programme die auf eine gleiche Ini Datei zugreifen.

Ein Programm Prüft alle 500 ms ob Einträge in der Datei vorhanden sind.
Das Zweite schreibt Befehle in die Datei.

Wie kann ich verhindern das beide Programme die Ini Datei zu gleicher Zeit öffnen ?

Mit TIniFile geht das gar nicht. Aber wenn Du die Datei als einfache Textdatei oeffnest, kannst Du beim CreateFile angeben, ob und welche gleichzeitigen Zugriffe moeglich sind.

twm
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 12.01.10 21:49 
Trotzdem ist diese Vorgehensweise absolut nicht zu empfehlen. Es hört sich so an, als sollte das eine Programm warten, bis ein anderes Programm fertig mit irgendwas ist.

Dann sollte das andere Programm besser am Ende eine passende Message ans erste Programm senden, per WM_COPYDATA kann man dann auch Daten rüberschaufeln. Oder (wenn das zu kompliziert ist): Eine Nachricht schicken, die besagt: "Gugge mol, ich hab da die Datei für dich fertig geschrieben."

Wenn ich ein Päckchen erwarte, dann renn ich ja auch nicht alle 5 Minuten zur Packstation, sondern warte auf die SMS "Paket ist da". :zwinker:

_________________
We are, we were and will not be.