Einzelnen Beitrag anzeigen

PhilCore

Registriert seit: 15. Jun 2005
Ort: Neumünster
21 Beiträge
 
Delphi 2006 Enterprise
 
#1

FileNotification-Callback, Thread und eine kleine Schleife

  Alt 20. Sep 2011, 11:15
Hallo Ihr Delphianer,

ich habe gerade eine kleine, aber feine Aufgabe auf den Tisch bekommen und versuche diese zu lösen. Vielleicht könnt Ihr mir ein bißchen behilflich sein.
Ich werde das mal versuchen, das vereinfacht darzustellen.
Also:
Ich habe mehrere Kanäle (Threads) und jeder Kanal hat eine FileNotification-Instanz, die eine Callback-Funktion erhält.
Die Callback-Funktion ist wie folgt deklariert:
function FnChgCallBack( ENTClientHandle : HFNCHG; InfoData : PFNCHG_FILE_INFORMATIONA ) : Boolean; stdcall;
Delphi-Quellcode:
function TChannelThread.FnChgCallBack(ENTClientHandle: HFNCHG; InfoData: PFNCHG_FILE_INFORMATIONA): Boolean;
var
  _count : integer;
  _fertig : boolean;
  _out : String;
  _sLog : String;
begin
  result := True;
  _count := 0;
  _fertig := false;
  while (not _fertig) and (_count < 10000) do
  begin
    inc(_count);
    _out := GetOldestFile(FFileChangeNotification.FolderFilter);
    if _out <> 'then
    begin
      _sLog := format('Msg-Datei zur Bearbeitung gefunden --> %s ',[FInputDirectory+ _out]);
      WriteLogAndForm(_sLog, INFOLEVEL);
      Parse_Msg(_out);
    end
    else _fertig := false
  end;
end;
Der else-Zweig ist übrigends falsch. Der läuft immer bis 10000.
Kommen wir mal zu meinen Fragen:

Was passiert mit dem Thread (oder der function) wenn die Schleife noch läuft und ein erneuter Callback reinkommt?
Kann es eigentlich reibungslos funktionieren mit dem Callback oder muß ich den Trick von Lucky http://www.michael-puff.de/Programmierung/Artikel/CallbackMethod.shtml verwenden, um ein sicheres Ergebnis zu bekommen?

In unserem Fall läuft der Dienst nach einiger Zeit zwar noch, aber die Kanäle arbeiten nicht mehr wirklich. Ich habe den verdacht, daß sich der Fehlerteufel (Entwickler) in dem oben beschriebenen Abschnitt befindet.

Viele Fragen, aber ich hoffe auf viele Antworten.

Vielen Dank im Vorraus
Thorsten
Erzähl mir nicht, wie man verliert.
  Mit Zitat antworten Zitat