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