Autor |
Beitrag |
woully
      
Beiträge: 78
|
Verfasst: 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 Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 12.01.2010 um 17:53
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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
      
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)
|
Verfasst: 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Di 12.01.10 20:02
Die arme Festplatte.  Versetz dich doch mal in die Lage des Lesekopfes, der inzwischen noch ein Word-Dokument öffnen will. Der tut mir echt leid.
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
      
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)
|
Verfasst: 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
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Di 12.01.10 21:43
Jakob_Ullmann hat folgendes geschrieben : | 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
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Di 12.01.10 21:46
woully hat folgendes geschrieben : |
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
      
Beiträge: 8549
Erhaltene Danke: 478
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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". 
_________________ We are, we were and will not be.
|
|
|