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

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

Вопрос про


Страницы:   1 2

Спрашивающий ©   (2002-12-16 09:00:00) 

У меня в прграмме работает цикл выполняющий определенные вычисления для большого колличества данных при этом компьютер не виснит а как можно выразиться "подвисает" на время выполнения данного цикла, т.е. не воспринимает команды: от клавиатуры, мыши,невозможна работа с другими программами и т.д.). Я хочу чтобы при выполнении данной операции можно было работать с другими приложениями пока идет цикл. Как это сделать .


Digitman   (2002-12-18 09:01:00) [1]


> KSergey


Ок. Сойдемся таки на понятии "сообщение" как на более точно отражающем первопричинную суть.
Хотя смысловой контекст обоих терминов весьма схож - сообщение, поставленное системой в целевую очередь, для целевого код.потока в некотором роде является событием, реагировать или не реагировать на которое он может по своему усмотрению.
В той же VCL во многих случаях событие (точнее - факт его возбуждения) является практически прямым следствием реакции на сообщение


Song   (2002-12-18 08:36:00) [2]

2Интересно (18.12.02 03:21)
Просто не переключился и написал ответ автоматически. Имя же запоминается и его вводить не надо.


Интересно   (2002-12-18 03:21:00) [3]

2 Song © (17.12.02 08:31)
Усёк. Но я и не сомневался в том.
Но был бы не прочь именовать уважаемого (без иронии) Анатолия по отчеству, почему и спросил о "первой Р".
И все таки не пойму - зачем отвечать на вопросы как "арр", а не как Anatoly Podgoretsky?


KSergey   (2002-12-17 09:27:00) [4]


> Digitman © (16.12.02 11:54)
> >KSergey
>
> >>События приложению как минимум не адресуются
>
> Ничего подобного. ну и т.д...

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


app   (2002-12-17 08:58:00) [5]

Digitman © (16.12.02 11:54)
Вот видишь достаточно было спросить, что бы поняли, что так поступать некрасиво.


Song   (2002-12-17 08:31:00) [6]

app - модератор


Интересно   (2002-12-17 03:08:00) [7]

2 app
Анатолий, а что означает первое "p" в данном нике?
И почему Вы в последнее время "едины в двух лицах"?


Спрашивающий   (2002-12-17 01:56:00) [8]

Мастера всем спасибо Application.ProcessMessages вполне устроил.
Отдельно приношу извинения Digitman © за не корректное обращение.


Danlicha   (2002-12-16 12:22:00) [9]

А вот по-моему, если стоит DMA, то подобное обращение к диску наоборот должно "успокаивать" систему, т.к. в то время, как с винта читаются данные, остальные процессы прекрасно могут таботать. Многие люди не включают DMA, а потом удивляются, что это так комп виснет. Но это ен совсем по теме, пардон. А так, конечно, поток нужно делать. Если очень критично, можно читать из файла не по строчке, а по кластерам, ну хоть по 16 кб. А если уж совсем критично, то нужно делать два потока - один дитает новюу порцию данных, другой обрабатывает предыдущую. Хотя "наглость" программы от этого не уменьшится.


Digitman   (2002-12-16 11:57:00) [10]


> Цифровая строка из файла


Вот это и наводит на подозрение, что в цикле таки происходит вызов файловых ф-ций ядра. Здесь, возможно, и есть "узкое" место, из-за которого твой процесс "тормозит" все прочие процессы системы.

Подробней ...


Digitman   (2002-12-16 11:54:00) [11]

>app

Никак не отношусь. До тех пор, пока нет откровенного хамства.

>KSergey

>>События приложению как минимум не адресуются

Ничего подобного. Сообщения, адресованные окнам и потокам процесса, успешно ставятся в соответствующие очереди, но вот за выборку из этих очередей нужных сообщений отвечают циклы каждого из заинтересованных код.потоков процесса. И если код.поток процесса длительное время занят какими-то своими "делами" и не выбирает (хотя бы эпизодически) сообщения из "своих" очередей, то и реагировать на них оперетивно код.поток будет не в состоянии. Ибо реакция на сообщение - это его обработка ПОСЛЕ выборки из очереди.

>Спрашивающий


> компьютер действительно подвисает.Пробовал и на Пне 166
и на 900.


Такое впечатление действительно может создаваться, если в "тяжелом" цикле твоего приложения происходит интенсивное обращение к приоритетным системным операциям или неразделяемым сист.ресурсам.
Если твой "тяжелый" цикл не делает ничего мудреней, чем инкремент какой-нибудь лок.переменной, то такой цикл в принципе не может "подвесить" другие процессы системы !


Спрашивающий   (2002-12-16 11:01:00) [12]

Цикл элементарный но значений много
procedure TForm1.Button1Click(Sender: TObject);
var
J:Integer;
E:Extended;
begin
E:=0;
For J:=1 To 200000 или больше Do
E:=E+Sqrt(StrToFloat(Trim(Цифровая строка из файла)));
end;


KSergey   (2002-12-16 10:45:00) [13]

> Спрашивающий (16.12.02 10:07)
> ЦифрМэн знаете компьютер действительно подвисает.Пробовал
> и на Пне 166 и на 900.

Тогда цикл в студию! Что-то действительно странно... Возможно, затормаживает другие приложения, работать они начинают медленее, но не до полной же их заморозки,а?

> Digitman © (16.12.02 09:53)
> Application.ProcessMessages в цикле ... позволяет приложению реагировать на адресованные
> ему сообщения/события...

Простите, придерусь к словам (сам не знаю зачем): позволяет реагировать на адресованные сообщения. И все! События приложению как минимум не адресуются ;)


NailS   (2002-12-16 10:39:00) [14]


> Спрашивающий (16.12.02 10:07)
> знаете компьютер действительно подвисает

100% загрузка процессора не означает повисания компьютера.
Он просто много работает ;)


app   (2002-12-16 10:30:00) [15]

Digitman © (16.12.02 09:53)
Как ты относишься к целенаправленному искажению твоего псевдонима?


Спрашивающий   (2002-12-16 10:07:00) [16]

ЦифрМэн знаете компьютер действительно подвисает.Пробовал и на Пне 166 и на 900.


Сергей   (2002-12-16 09:58:00) [17]

ЦифрМэн прав по поводу замедления при использовании Application.ProcessMessages, так что если цикл реально нагружен, то я бы так не делал.


Digitman   (2002-12-16 09:53:00) [18]

Ничего универвального не бывает. Всякая задача оптимизируется индивидуально.

Application.ProcessMessages в цикле - палка о двух концах. С одной стороны, позволяет приложению реагировать на адресованные ему сообщения/события, с другой стороны - при "тяжелых" и неразумно построенных циклах - резко снижает производительность процесса данного приложения.

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


Сергей   (2002-12-16 09:53:00) [19]

Могёшь, братуха, написать и Application.ProcessMessages. Ghfdlf dcz "nf ,tlf yfxbyftn lbrj vtlktyytt hf,jnfnm


Спрашивающий   (2002-12-16 09:50:00) [20]

Спасибо Song.


Страницы:   1 2

Наверх

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