Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многопоточность MDI приложения [D7, Win95/98, WinME, Win2k, WinXP]


Евгений ©   (2003-11-26 10:45:00) 

Программеры добрые подскажите, можно ли сделать MDI приложение многопоточным, если можно, то как?


Евгений   (2003-11-27 12:00:00) [1]

БОЛЬШОЕ ВСЕМ СПАСИБО, особенно Digitman и sniknik за подробные разъяснения.


Digitman   (2003-11-27 11:33:00) [2]


> Насколько снизиться производительность программы при использовании
> этого метода?


"программы" - нинасколько

а вот производительность основного алгоритма, реализованного втой процедуре, где вызывается Application.ProcessMessages, будет уменьшаться настолько, насколько часто будут осуществляться вызовы Application.ProcessMessages


Евгений   (2003-11-27 11:07:00) [3]

Вопрос по Application.ProcessMessages. Насколько снизиться производительность программы при использовании этого метода?


sniknik   (2003-11-27 08:40:00) [4]

Евгений (27.11.03 06:34) [9]
> Получаеться, что как бы я не старался - все бестолку? Приложение так и будет подвисать?
с чего такие выводы? поток однозначно должен размораживать интерфейс программы (так же как и Application.ProcessMessages), если конечно он нормально написан.
а не "шедевр" вроде этого (реально видел под вопросом "почему тормоза")

procedure Thread.DoWork;
begin
//собственно код
end;

procedure Thread.Execute;
Begin
Synchronize(DoWork);
End;

плюс если в потоке работа с базой то могут быть свои тонкости, например нельзя получать данные во "внешний" по отношению к потоку рекорсет (грид к нему подключенный на форме лежит...), он может как затормозить так и вообще завалить работу программы.


Digitman   (2003-11-27 08:22:00) [5]


> Евгений



> Конечно ничего бы не изменилось


но ведь ты же упомянул MDI ? всуе, значит ... так надо понимать)


> Получаеться, что как бы я не старался - все бестолку? Приложение
> так и будет подвисать?


что мешает код "длительной по времени операции" сделать циклическим и в тело цикла вставить хотя бы одну строчку Application.ProcessMessages ? Если это не противоречит логике приложения, то позволит "убить сразу 2-х зайцев" : обойтись без доп.код.потоков и "оживить" польз.интерфейс приложения


Евгений   (2003-11-27 06:34:00) [6]

Получаеться, что как бы я не старался - все бестолку? Приложение так и будет подвисать?


sniknik   (2003-11-26 20:52:00) [7]

возрадуйся! частное ничем не отличается от общего делай так же как если бы это было не MDI.
или перенеси свой поток в простое приложение (для проверки) и получиш скорее всего то же зависание. и убедишся что MDI тут ни причем.

> что на всю программу выделяеться один поток
глупости, сколько угодно потоков можно сделать, может имел в виду однопоточность VCL?


Евгений   (2003-11-26 17:46:00) [8]

Конечно ничего бы не изменилось. Все упирается не MDI, а как я думаю в то, что на всю программу выделяеться один поток. Другое дело как это исправить, в MDI форме в частности.


Digitman   (2003-11-26 16:36:00) [9]

а если бы это не MDI было, как ты считаешь - проблема бы сама собой "рассосалась" ? Т.е. все упирается именно в то, сто - MDI ?

выскажи свои соображения ... будем править ход твоих мыслей в нужное русло)


Евгений   (2003-11-26 15:39:00) [10]

Описываю что есть: Проложение на основе MDI форм. Если запускаем какую-нибудь длительную по времени операцию в дочерней форме, то все приложение виснит до завершения этой операции. Хотелось бы избавиться от "однозадачности" приложения. (Работа идет с Базой Данных)


Digitman   (2003-11-26 15:22:00) [11]


> по данному поводу


по какому поводу ? конкретно ?

в MSDN есть все

ты лучше опиши задачу свою конкретно
под сабжем можно понимать либо все что угодно либо сабж вообще не имеет смысла


Евгений   (2003-11-26 15:12:00) [12]

А где почитать пожно по данному поводу?


Digitman   (2003-11-26 11:45:00) [13]

MDI-технология как таковая имеет мало общего с концепцией/механизмами мультипоточности Win32-процесса как такового


Владислав   (2003-11-26 11:33:00) [14]

Можно. Так же, как и все остальные (не MDI).


Наверх

Титульная страница Поиск, карта сайта Написать письмо