![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание форм в потоках [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
Во-вторых, интересная у тебя форма для ввода пароля. Точнее даже не сама форма, а то как она немодально отображается.
И в-третьих, здесь, на форуме, конечно есть индивидумы с наклоностями Нострадамусов, но лучше всё-таки привести ошибку, чтобы облегчить им задачу.