![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос про потоки и модальные формы
Starkom © (2002-04-18 09:34:00)есть простенький код:
var
Form1: TForm1;
Thread:SecThread;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Thread:=SecThread.Create(false);
Thread.FreeOnTerminate:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Thread.Suspend;
end;
...
procedure SecThread.Execute;
begin
Form2:=TForm3.Create(Form1);
Form2.Caption:="Thread";
Form2.ShowModal;
Form2.Free;
end;
Фактически кода больше нет. Так вот, при Thread.Suspend; приложение капитально повисает! Объясните, плиз, что делать!
kull (2002-04-18 11:58:00) [21]С формами в потоке, я думаю все тоньше - это уже системный уровень.
Системные события обрабатывает главный поток (если только системе не указать что-то дополнительно).
И при создании формы , думаю что в Delphi окна создаются при главном потоке.
Так какая цель создания формы в другом потоке?
Shaman_Naydak (2002-04-18 11:45:00) [22]VCL писали без поддержки многопоточности.. Потому-то и геморр, особенно с таким хрупким методом как ShowModal (исходники посмотрите)
Digitman (2002-04-18 11:36:00) [23]Где синхронизация методов конструирования формы и обращения к методам формы в процедуре Execute() ?
kull (2002-04-18 11:11:00) [24]А зачем создавать модально форму не в главном потоке.
Starkom (2002-04-18 10:56:00) [25]2 kull:
дело в том, что до суспенда я могу свободно переключаться на Form1, хотя Form2 и модальная. А после суспенда приложение, вообще, не реагирует ни на что.
kull (2002-04-18 10:39:00) [26]Я так думаю, Suspend приостанавливает поток и модальная форма перестает обрабатывать события до тех пор пока поток не отпустишь (Resume).