Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизСоздание форм в потоках Найти похожие ветки
← →
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;
У меня выдало ошибку. Неужели создание таким образом форм возможно только в основном потоке? Или я совершаю какую-то идиотскую ошибку? Может, Вы порекомендуете альтернативный подход?
← →
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/
Во-вторых, интересная у тебя форма для ввода пароля. Точнее даже не сама форма, а то как она немодально отображается.
И в-третьих, здесь, на форуме, конечно есть индивидумы с наклоностями Нострадамусов, но лучше всё-таки привести ошибку, чтобы облегчить им задачу.
← →
Suntechnic © (2004-03-17 18:19) [1]Во-первых, сама идея создания форм в доп. потоке не очень хорошая см. http://delphimaster.net/view/1-1079449791/
Во-вторых, интересная у тебя форма для ввода пароля. Точнее даже не сама форма, а то как она немодально отображается.
И в-третьих, здесь, на форуме, конечно есть индивидумы с наклоностями Нострадамусов, но лучше всё-таки привести ошибку, чтобы облегчить им задачу.
← →
Digitman © (2004-03-18 08:21) [2]
> Может, Вы порекомендуете альтернативный подход?
брось никчемную затею с созданием формы в доп.потоке
она совершенно неоправдана
созданием/визуализацией формы должен заниматься осн.поток, задача же доп.потоков - длительные вычисления параллельно с работой осн.потока
← →
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>
Я учту ваши замечания, спасибо, просто мне стало интересно - почему окно не видно
← →
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)
← →
Digitman © (2004-03-19 08:09) [4]
> просто мне стало интересно - почему окно не видно
отвечаю - не видно оно потому что ты вызвал метод визуализации формы в доп.код.потоке, что привело к исключительной ситуании при обращении к канве
метод Show (и не только он один, а и многие другие) должен был быть вызван тобой в контексте осн.код.потока, что делается простой конструкцией Synchronize(frmPass.Show)
← →
y-soft © (2004-03-19 08:28) [5]Иногда действительно создание окон в отдельных потоках сулит разные выгоды. Но именно окон, а не форм!
Так, например, делает Проводник Windows
Так что надо либо использовать чистый WinAPI, либо писать свой аналог потокобезопасного класса-обертки. Либо создавать формы только в первичном потоке и не забывать про синхронизацию доступа...
← →
y-soft © (2004-03-19 08:28) [5]Иногда действительно создание окон в отдельных потоках сулит разные выгоды. Но именно окон, а не форм!
Так, например, делает Проводник Windows
Так что надо либо использовать чистый WinAPI, либо писать свой аналог потокобезопасного класса-обертки. Либо создавать формы только в первичном потоке и не забывать про синхронизацию доступа...
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c