Ich verstehe einfach nicht, wieso Du keine TThreadlist nimmst... (Ich verstehe auch nicht, wieso Du nicht einfach eine 'TCriticalSection' verwendest. Dafür hast Du doch Delphi, damit Du dich nicht/seltener mit der
API rumschlagen musst)
So gehts im Prinzip:
Delphi-Quellcode:
Var
LocalList : TList;
Begin
LocalList := MyThreadList.LockList;
Try
// ... tuwat mit der LocalList
Finally
MyThreadList.Unlock;
End
End;
Dein Thread erstellt also eine neue EnumWindowsList und schmeisst Die dann per o.g. Code in die ThreadListe. Wenn jemand von außen die Liste will, macht er das genauso:
Delphi-Quellcode:
Procedure TMyThread.AssignToThreadList (aList : TList);
Var
LocalList : TList;
Begin
LocalList := MyThreadList.LockList;
Try
LocalList.Assign (aList);
Finally
MyThreadList.Unlock;
End
End;
Procedure TMyThread.GetFromThreadList (aList : TList);
Var
LocalList : TList;
Begin
LocalList := MyThreadList.LockList;
Try
LocalList.AssignTo (aList);
Finally
MyThreadList.Unlock;
End
End;
Procedure TMyThread.Excute;
Var
MyList : TList;
Begin
While not Terminated Do Begin
CreateWindowList (MyList);
AssignToThreaDList (MyList);
Sleep(SomeTime); // sonst geht doch die CPU auf 100%
End
Fertig.
Wenn Du eine CS willst, dann geht das damit (fast) genauso. Aber wieso das
Rad neu entwickeln. Dazu gibt es schließlich die TThreadlist.