Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание форм в потоках [D7, NT4, Win2k, WinXP]


Arm79 ©   (2004-03-17 17:48:00) 

Уважаемые мастера. Столкнулся с такой проблемой

пытался в потоке создать форму для ввода пароля

писал и так и этак
procedure TDelThreadExecute(...);
var
 frmPass : TfrmPass;
begin
 frmPass := TfrmPass.Create(   a) Application
                               b) nil    );
 frmPass.Show;
 frmPass.Update;
 ...
end;

У меня выдало ошибку. Неужели создание таким образом форм возможно только в основном потоке? Или я совершаю какую-то идиотскую ошибку? Может, Вы порекомендуете альтернативный подход?


y-soft   (2004-03-19 08:28:00) [1]

Иногда действительно создание окон в отдельных потоках сулит разные выгоды. Но именно окон, а не форм!

Так, например, делает Проводник Windows

Так что надо либо использовать чистый WinAPI, либо писать свой аналог потокобезопасного класса-обертки. Либо создавать формы только в первичном потоке и не забывать про синхронизацию доступа...


Digitman   (2004-03-19 08:09:00) [2]


> просто мне стало интересно - почему окно не видно


отвечаю - не видно оно потому что ты вызвал метод визуализации формы в доп.код.потоке, что привело к исключительной ситуании при обращении к канве

метод Show (и не только он один, а и многие другие) должен был быть вызван тобой в контексте осн.код.потока, что делается простой конструкцией Synchronize(frmPass.Show)


Arm79   (2004-03-18 18:48:00) [3]

Suntechnic ©   (17.03.04 18:19) [1]

Неважно - Show или ShowModal - не работает и так, и этак
На самом деле у меня в потоке происходит рисование на рабочем столе в цикле и иногда(по условию) всплывает (должно всплываться) окно. Разумеется оно модальное. Что касается Нострадамусов и телепатов - это конечно святая истина и я это понимаю. Я неправильно выразился - выдало ошибку у меня значило, что вызов формы вообще не сработал, причем без эксепшонов. В потоке все прогоняется без запинок, но форма не выводится

Suntechnic ©   (17.03.04 18:19) [1]
Digitman ©   (18.03.04 08:21) [2]/I>

Я учту ваши замечания, спасибо, просто мне стало интересно - почему окно не видно


Digitman   (2004-03-18 08:21:00) [4]


> Может, Вы порекомендуете альтернативный подход?


брось никчемную затею с созданием формы в доп.потоке
она совершенно неоправдана

созданием/визуализацией формы должен заниматься осн.поток, задача же доп.потоков - длительные вычисления параллельно с работой осн.потока


Suntechnic   (2004-03-17 18:19:00) [5]

Во-первых, сама идея создания форм в доп. потоке не очень хорошая см. http://www.delphimaster.ru/cgi-bin/forum.pl?id=1079449791&n=0

Во-вторых, интересная у тебя форма для ввода пароля. Точнее даже не сама форма, а то как она немодально отображается.

И в-третьих, здесь, на форуме, конечно есть индивидумы с наклоностями Нострадамусов, но лучше всё-таки привести ошибку, чтобы облегчить им задачу.


Наверх

Титульная страница Поиск, карта сайта Написать письмо