Главная страница
    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.044 c
8-1075933617
DjTheme
2004-02-05 01:26
2004.05.09
Как проиграть МП3 или что то другое на двух звуковухах


1-1082802340
csr
2004-04-24 14:25
2004.05.09
Своя надпись на TListView


14-1082473979
Тимохов
2004-04-20 19:12
2004.05.09
NLS от Microsoft.


7-1080199384
ламерламер
2004-03-25 10:23
2004.05.09
FormClass из строки


4-1079172047
Sur
2004-03-13 13:00
2004.05.09
TProcessEntry32





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский