That is a good guess, but there is more because this:
procedure ShdkThread.Execute;
begin
Synchronize(Show);
end;
means he is misusing a thread and actually executes something what looks like a thread without using the benefits of a thread: It simply executes in consecutve order. (a.k.a. a Threat!

)
Bad code.
The output/result of a thread can be synchronized if needed, but plz not the whole thread....That is completely missing the point.
I know thread programming is difficult, but that is because it is, well, difficult.