Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 19:46   #1
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
Печаль Создание формы в потоке

Прога обращается к серверу и при получении ответа выполняются различные действия
Хочу чтобы во время ожидания ответа форма не зависала, т.е. юзаю потоки.
При создании формы в потоке
Код:
Application.CreateForm(TForm1, Form1);
эксепшн:
-
Project Project31.exe raised exception class EOSError with message 'System Error. Code: 1400.
Недопустимый дескриптор окна'. Process stopped. Use Step or Run to continue.
-
Pamparam вне форума Ответить с цитированием
Старый 30.11.2011, 19:49   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

к VCL нельзя обращаться не из главного потока.

Цитата:
Прога обращается к серверу и при получении ответа выполняются различные действия
вот это и нужно поместить в отдельный поток, а не форму.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 30.11.2011, 19:51   #3
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

какой поток является гланвым? он у меня один
Pamparam вне форума Ответить с цитированием
Старый 30.11.2011, 19:52   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> т.е. юзаю потоки
> он у меня один

вы уж определитесь, сколько их у вас

> какой поток является гланвым?

тот, который создался первым при запуске приложения.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 30.11.2011, 19:57   #5
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
> т.е. юзаю потоки
> он у меня один

вы уж определитесь, сколько их у вас
окончание не в виду количества, а как название метода

Цитата:
Сообщение от veniside Посмотреть сообщение
тот, который создался первым при запуске приложения.
поток создается при нажатии кнопки
Цитата:
Сообщение от veniside Посмотреть сообщение
вот это и нужно поместить в отдельный поток, а не форму.
в потоке и само обращение к серву (чтобы не подвисало) и последующие действия

Последний раз редактировалось Pamparam; 30.11.2011 в 20:01.
Pamparam вне форума Ответить с цитированием
Старый 30.11.2011, 20:00   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
поток создается при нажатии кнопки
он у меня один
вы издеваетесь? Если вы создаёте поток, то их как минимум уже два. Или по-вашему, тот код, который создаёт новый поток, сам висит в памяти и для своего исполнения потока не требует?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось mihali4; 01.12.2011 в 12:17.
veniside вне форума Ответить с цитированием
Старый 30.11.2011, 20:03   #7
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

каким тогда образом убрать зависание и выполнять результаты (создание форм и т.п.) в основном потоке?
Pamparam вне форума Ответить с цитированием
Старый 30.11.2011, 20:07   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Прога обращается к серверу и при получении ответа выполняются различные действия
вот это обращение и ожидание и поместите в дополнительный поток

Цитата:
Прога обращается к серверу
Если это SQL запрос, c этим тоже могут быть отдельные проблемы, но это другой уже вопрос. Если не SQL, то особых проблем быть не должно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось mihali4; 01.12.2011 в 12:17.
veniside вне форума Ответить с цитированием
Старый 30.11.2011, 20:11   #9
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

нет, через indy, а sql делается на самом серве
обращение и ожидание в потоке... как результаты делать не в потоке то?
Pamparam вне форума Ответить с цитированием
Старый 30.11.2011, 20:17   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

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

Цитата:
как результаты делать не в потоке то?
что такое "делать результаты"? и почему их надо делать не в потоке?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось mihali4; 01.12.2011 в 12:18.
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
winsock udp сервер в потоке, не работает при создании формы или обращению к VCL компоненту marikcool Работа с сетью в Delphi 1 01.10.2010 00:57
ошибка при закрытии формы после обработки в потоке furstenberg Общие вопросы Delphi 7 05.07.2010 12:19
Thread. проблемы с работой потока. Моментально исчезают созданные в потоке формы. Casper-SC Общие вопросы .NET 3 24.04.2010 12:28
Создание формы tae1980 Microsoft Office Excel 6 16.03.2010 08:03
Создание формы Pilot Microsoft Office Excel 2 15.11.2007 10:35