while Fcritical do /////////1111 到这里时就不执行了
begin
Application.ProcessMessages;
Sleep(1);
end;
Fcritical := true;
很不理解你的代码 既然Fcritical是True才能运行begin end之间的代码
那后面又将Fcritical := true;(这句不是多余的)
如果是布尔型变量那用这样不更好
IF Fcritical then
begin
Application.ProcessMessages;
Sleep(1);
end;