Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

Вопрос про   Найти похожие ветки 

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

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


 
Song ©   (2002-12-16 09:10) [1]

Application.ProcessMessages, однако это не всегда панацея. Иногда приходится делать отдельную нить.


 
KSergey ©   (2002-12-16 09:11) [2]

Если бы вы потрудились затратить те 5 минут, что ушли на написание вопроса, потратить на поиск в инете, то легко нашли бы как минимум 2 варианта:
1) Использовать отдельный поток
2) Application.Processmesages

Подробностей не спрашивайте. Ищите в инете по указанным ключевым словам. Это стандартные вопросы.


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

Спасибо мастера, буду разбираться, но насколько я правильно понял сложного в этом действительно ничего нет : в тело цикла нужно добавить лишь одну строку Application.ProcessMessages.
Или я не прав?


 
Song ©   (2002-12-16 09:36) [4]

Да ты прав, но как я уже сказал, не всегда может устроить.


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

А что же оптимально? Или даже не оптимально, а универсально?
Попробую разобраться с потоками.


 
Song ©   (2002-12-16 09:46) [6]

Оптимально - TThread


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

Спасибо Song.


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

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


 
Digitman ©   (2002-12-16 09:53) [9]

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

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

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


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

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


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

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


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

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


 
NailS ©   (2002-12-16 10:39) [13]


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

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


 
KSergey ©   (2002-12-16 10:45) [14]

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

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

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

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


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

Цикл элементарный но значений много
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;


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

>app

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

>KSergey

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

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

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


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


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


 
Digitman ©   (2002-12-16 11:57) [17]


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


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

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


 
Danlicha ©   (2002-12-16 12:22) [18]

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


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

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


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

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



 
Song ©   (2002-12-17 08:31) [21]

app - модератор


 
app ©   (2002-12-17 08:58) [22]

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


 
KSergey ©   (2002-12-17 09:27) [23]


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

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


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

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


 
Song ©   (2002-12-18 08:36) [25]

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


 
Digitman ©   (2002-12-18 09:01) [26]


> KSergey


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



Страницы: 1 вся ветка

Текущий архив: 2002.12.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
3-98984
dias
2002-12-09 18:29
2002.12.30
Мастера, подскажите, в чем причина


4-99410
Ruzz
2002-11-14 11:41
2002.12.30
не работает RegSaveKey!


1-99193
Hooch
2002-12-19 09:31
2002.12.30
Word + Delphi


7-99386
Yuri Btr
2002-10-04 11:19
2002.12.30
TFileStream vs BlockRead


6-99225
Cowboy
2002-11-01 10:19
2002.12.30
Delphi 7 и сохранение инет страниц