![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопоточность 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).