Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-99410
Ruzz
2002-11-14 11:41
2002.12.30
не работает RegSaveKey!


6-99234
alexnaro
2002-10-31 13:21
2002.12.30
Как проверить существование e-mail адреса?


1-99089
chsv
2002-12-16 20:12
2002.12.30
специальный графический формат


4-99422
bobo
2002-11-13 09:39
2002.12.30
Прозрачность окон в W2k/XP


14-99337
sad
2002-12-09 09:26
2002.12.30
Вопрос математикам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский