Главная страница
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.032 c
14-1079518785
DBDEV
2004-03-17 13:19
2004.04.11
Горит вакансия WEB программиста. Пишите.


14-1079303997
putyaga
2004-03-15 01:39
2004.04.11
помогите люди


3-1079002352
Deedlit
2004-03-11 13:52
2004.04.11
Поиск двойников


9-1071308489
SliderCrash
2003-12-13 12:41
2004.04.11
Как взять палитру из загружаемого bmp (8bit)?


14-1082051276
Michael
2004-04-15 21:47
2004.04.11
Порекомендуйте книгу по организации/архитектуре ЭВМ.