AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kommunikation zwischen zwei Delphiprogrammen
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen zwei Delphiprogrammen

Ein Thema von rwb · begonnen am 26. Nov 2022 · letzter Beitrag vom 17. Nov 2023
 
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#29

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 29. Nov 2022, 13:38
Hallo,
>Programm 1 schreibt seine Daten, die berechnet werden sollen, in Verzeichnis A, Programm 2 wartet darauf, dass in Verzeichnis A Dateien angelegt werden,
Es ist das warten von Programm 2, also die Überwachung eines Verzeichnisses. Ich habe einen ziemlichen Teil des Sonntags damit verbracht dafür eine praktikable Lösung zu suchen.
...
Wie haben Sie das gelöst?
Gar nicht. Ich benutze diese Lösung nicht selbst, sie ist mir nur spontan eingefallen.

Es gibt dafür aber die WinAPI Funktionen FindFirstChangeNotification / FindNextChangeNotification, die ich z.B. in dzEditorLineendsFix verwende, um die Font-Datei, die Delphi 2007 erzeugt, jedesmal wieder in ein anderes Verzeichnis zu verschieben.

Der Code läuft in einem Hintergrundthread und sieht so aus:

Delphi-Quellcode:
procedure Tf_EditorLineEndsFix.ExecuteInThread(_Sender: TObject);
var
  Err: DWORD;
  NotifyHandle: THandle;
  Res: DWORD;
begin
  try
    CheckForFile;
    NotifyHandle := FindFirstChangeNotification(PChar(TFileSystem.GetTempPath), false,
      FILE_NOTIFY_CHANGE_FILE_NAME);
    if NotifyHandle = INVALID_HANDLE_VALUE then begin
      Err := GetLastError;
      RaiseLastOsErrorEx(Err, _('Error %1:s (%0:d)'));
    end;
    try
      while not TThread.CheckTerminated do begin
        Res := WaitForSingleObject(NotifyHandle, 100);
        if res = WAIT_OBJECT_0 then begin
          CheckForFile;
          if not FindNextChangeNotification(NotifyHandle) then begin
            Err := GetLastError;
            RaiseLastOsErrorEx(Err, _('Error %1:s (%0:d)'));
          end;
        end else if res = WAIT_TIMEOUT then begin
          // stay in the loop
        end else
          raise Exception.CreateFmt(_('WaitForSingleObject failed with error code %d.'), [res]);
      end;
    finally
      FindCloseChangeNotification(NotifyHandle);
    end;
  except
    on e: Exception do begin
      doWriteToLog(e.Message);
    end;
  end;
end;
Im Prinzip könntest Du diesen Code nutzen, müsstest nur in CheckForFile die Verarbeitung vornehmen. Und natürlich in FindFirstNotification statt TFileSystem.GetTempPath das korrekte Verzeichnis übergeben.

Und nicht vergessen: Der Code sollte in einem Hintergrund-Thread laufen, sonst blockiert er das UI.
Thomas Mueller
  Mit Zitat antworten Zitat
 


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 08:02 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