Was, du hälst von außen den anderen Thread an fragwürdig undefinierter Stelle an?
TThread.Suspend
Wenn das, dann NIEMALS, schäm dich, steinigt ihn, ...
Nicht umsonst wurden Resume/Suspend inzwischen als deprecated deklariert.
Mit etwas Glück kann man durch sowas sein komlettes Programm lahmlegen,
z.B. wenn der Thread gerade dabei war beim MemoryManager eine Speicheranforderung zu machen (Get/Free/Alloc/Realloc/...) und der Thread gerade da pausiert wird, wo er eine der CriticalSections im Manager blockiert hat und der andere Thread im selben Speicherbereich etwas machen will.
Für eine "einfache"/billige Threadabsicherung ohne eigene Sperrinstanz kann man auch SendMessage oder TThread.Synchronize/Queue benutzen.
Delphi-Quellcode:
procedure ...;
var
B: Boelean;
begin
...
//Synchronize(procedure // innerhalb einer TThreadklasse
TThread.Synchronize(nil, procedure
begin
B = List.Find(xxx);
end);
if B then