Hi, I have a TThread, that processes a T(Thread)List of TSomeClass objects continuously.
I want to have a callback in the TSomeClass, to which another class can put their procedure to call into, but the callback needs to be 'thread safe' (because it can be accessed (read) by GUI related elements). I tried like this: TSomeClass = class private ... // other variables/fields public class var ProcessedCallback : TThreadMethod; var ... //other variavbles procedure Processed; end; procedure TSomeClass.Processed; begin if Assigned(ProcessedCallback) then ProcessedCallback(); end; and in the TMyThread I am trying to do var SomeClassList : TThreadList; // is declared private to the thread - only the thread manages the lifetime of the list members procedure TMyThread.Execute; var SomeClassLockedList: TList; begin i := 0; while not Terminated do begin if SomeClassList.Count = 0 then begin sleep(10); continue; end; SomeClassLockedList := SomeClassList.LockedList; // there are try/excepts around all here, but did not want to muddle the picture Queue(TSomeClass(SomeClassLockedList.Items[i]).Processed); // but above here I'm getting an error : got 'untyped', expected 'procedure variable type of object;Register'. SomeClassList.UnlockList; i := i+1; end; end; // the above sort-of gives the gist of what I'm trying to achieve What am I doing wrong ? Does the procedure to be enqueued have to be declared in the TThread header ? Hope some of it makes (any) sense ... Thanks in advance, -L. -- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus