Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизВопрос про Найти похожие ветки
← →
Спрашивающий (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c