Странное поведение TThread и Synchronized

Компьютеры Delphi потоки synchronized TThread

type mth = class(TThread)
procedure DoSmt;
procedure Execute; override;
end;

procedure mth.DoSmt;
begin
//
end;

procedure mth.Execute;
begin
while True do
begin
Sleep(100);
Synchronize(DoSmt);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
mth_ := mth.Create(true);
mth_.Priority := tpLower;
mth_.FreeOnTerminate := true;

mth_.Synchronize(mth_.DoSmt); << и тогда форма не зависает, поток рисует на форме как надо, если, вызвать mth_.Execute, как описано в туториалах, то форма виснет.
...
end;
Ответы:
Делать через класс TThread это прошлый век. Юзай Api потоки
1) в каких таких туториалах написано, что нужно вызывать Execute экземпляра потока в основном потоке?? - он вызывается автоматически после его запуска в отдельном потоке.
2) если создаете поток с параметром suspended равном true, то поток надо запускать методом Resume (или Start в современных версиях) после установки всех свойств.
3) в самом методе Execute лучше писать while not Terminated do вместо while True do, чтобы иметь возможность остановить цикл вызовом метода Terminate
4) мелочь, но все же, sleep лучше вызывать в конце цикла для более корректной работы п.3.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.