ich hab mal wieder eine etwas exotischere Frage: Kann ich eingebettete Funktionen als TThreadMethod aufrufen, oder zerschießt mir das den Stack?
Code: Alles auswählen
// TThreadMethod aus unit Classes;
TThreadMethod = procedure of object;
// meine Funktionen
function TFileThread.CancelJob(AJob: TJob): Boolean;
procedure InvalidJobError;
begin
TAsyncCallObject.CreateDebugLogError(Format(rsCancelJobNotFound,[PtrInt(AJob)]));
end;
// und so solls aufgerufen werden
Synchronize(@InvalidJobError);
Wie man sieht, greift die eingebettete Funktion auf keine Variable zu und könnte also auch ohne Stackframe-Pointer auskommen. Wenn der aber nicht übergeben wird fehlt er wird aber trotzdem wieder vom Stack entfernt -> Stack kaputt. Dazu kommt noch, dass die Aufrufkonvention register ist (default), was heißt, es wird gar nichts auf dem Stack abgelegt (Self + StackFrame = 2; 2 < 3 = nichts auf den Stack), sodass der garnicht zerschossen werden kann. Bzw. wie wäre das mit Cdecl oder oldfpccall, wo die aufrufende Funktion den Stack bereinigt, und die weiß, dass nichts übergeben wurde?
Was haltet ihr davon?