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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 17:29   #21
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

Уж и не знаю, как еще можно объяснить...
Как создать и показать форму в отдельном потоке? Мне нужно, чтобы форма работала в то время, когда компилируются другие формы проекта. Они компилируется около 5 секунд, поэтому искусственный sleep и прочее мне ни к чему. Возможно так сделать или нет?
Код:
begin
  Application.Initialize;

 //создаем и запускаем сплэш
  ...
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  ...
// убиваем сплэш
  Application.Run;
altcore вне форума Ответить с цитированием
Старый 30.07.2010, 23:42   #22
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
когда компилируются другие формы проекта. Они компилируется около 5 секунд
Хм... В смысле "компилируются формы"? Пока они все не сделают свои OnCreate чтоль?
А это чем же вы так завесили инициализацию форм что оно аж 5 секунд думает? о__О
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 02.08.2010, 11:21   #23
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

В OnCreate одной из форм компилируются 10 скриптов (~144кб).
altcore вне форума Ответить с цитированием
Старый 02.08.2010, 12:24   #24
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Хм..... Ну ладно... А там есть куда Application.ProcessMessages воткнуть в тот OnCreate?
Если нет, то придётся только в другом потоке...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 02.08.2010, 12:35   #25
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Никак. VCL - однопоточна.

Пора начинать работать по-взрослому и начать, пожалуй, стоит с принципа разделения интерфейса и рабочих данных.

P.S. Даже если бы VCL допускала бы создание окна во вторичном потоке - вас бы это не спасло. Потому что этот поток был бы обязан обслуживать окно до конца его жизни.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.08.2010, 12:35   #26
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

В принципе есть, можно 9 раз между скриптами вставить. Но хочется разобраться с реализацией с помощью потоков.

upd.

GunSmoker, в принципе такой ответ меня устраивает, а то я столько способов уже перепробовал. )

Последний раз редактировалось altcore; 02.08.2010 в 12:38.
altcore вне форума Ответить с цитированием
Старый 02.08.2010, 21:40   #27
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
applicatin.createform(form1,TMainForm);
application.createform(formprogress, TFormProgress);
application.onIdle:=formprogress.DoInitOthar;
application.run;
Код:
Tforrmprogress.DoInitOther(sender: Tobject; var done: boolen);
begin
  progresbar.position:=0;
  application.processnessage;
  application.createform(form2,Tform2);
  progresbar.position:=1;
  application.processnessage; 
  .......
  application.onIdle:=nil;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.08.2010 в 21:45.
evg_m вне форума Ответить с цитированием
Старый 02.08.2010, 21:49   #28
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от altcore Посмотреть сообщение
GunSmoker, в принципе такой ответ меня устраивает, а то я столько способов уже перепробовал. )
В таком случае в форме не должно быть ничего (поэтому все формы создадутся быстро). А вся работа должна сидеть в отдельном объекте - выделите новый модуль под это дело, перенесите в него весь код из ваших форм (возможно, нужно будет создать несколько модулей или объектов, если форм и кода у вас много). Код, который остаётся в формах, должен манипулировать только самой формой - загреить кнопку при нажатии, перетащить панельки и т.п. Для реальной работы форма просто вызовет метод рабочего объекта. И вот этот самый вызов вы можете спокойно выносить в поток.

Вероятно, подобная переделка займёт много времени, если у вас уже есть большой написанный проект. Но не стоит отказываться от этого, потому что писать большой проект в стиле "весь код кидаю в обработчики событий формы!" - глупость чистой воды. Вы же даже тесты к такому коду не прикрутите.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 03.08.2010, 00:44   #29
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ссылка в тему.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при запуске приложения -=pasha=- Общие вопросы Delphi 10 07.07.2010 13:46
Ошибка при запуске СиСи+ Общие вопросы C/C++ 4 17.06.2010 08:24
Ошибка при запуске wowan.mix Помощь студентам 1 16.05.2010 13:06
Проверка при запуске Nice42ru Помощь студентам 10 02.01.2010 18:52
"Ошибка приложения" при запуске мидлета hotman Общие вопросы по Java, Java SE, Kotlin 0 04.09.2008 15:16