Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
7-1080330501
Asd
2004-03-26 22:48
2004.05.09
Блокируем Cd-rom что не так делаю


3-1081514428
Strela
2004-04-09 16:40
2004.05.09
timeout expired


7-1080148513
beard
2004-03-24 20:15
2004.05.09
Мультизагрузка в Windows XP


7-1080551061
СержК
2004-03-29 13:04
2004.05.09
ShellExecute


1-1082452915
Max003
2004-04-20 13:21
2004.05.09
Перевести CHAR в STRING





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский