Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Создание форм в потоках   Найти похожие ветки 

 
Arm79 ©   (2004-03-17 17:48) [0]

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

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

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

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


 
Suntechnic ©   (2004-03-17 18:19) [1]

Во-первых, сама идея создания форм в доп. потоке не очень хорошая см. http://delphimaster.net/view/1-1079449791/

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

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


 
Digitman ©   (2004-03-18 08:21) [2]


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


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

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


 
Arm79 ©   (2004-03-18 18:48) [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-19 08:09) [4]


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


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

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


 
y-soft ©   (2004-03-19 08:28) [5]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
1-1082957632
voprosik
2004-04-26 09:33
2004.04.11
Динамический PopUp


1-1080138951
Marina
2004-03-24 17:35
2004.04.11
Как вывести строку из DLL


1-1080234355
новичок_из_сыктывкара
2004-03-25 20:05
2004.04.11
Надо чтобы в TEdit можно было вводить только цифры, а если


1-1082363396
xman
2004-04-19 12:29
2004.04.11
MDIchild


11-1060108839
Юджин
2003-08-05 22:40
2004.04.11
Народ нужна помощь, проблема с установкой и работой компонентов