Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

100% загрузка CPU бесконечным циклом в потоке.   Найти похожие ветки 

 
Gear   (2005-01-14 00:46) [0]

Обнаружил что у меня бесконечный цикл в отдельном потоке вызывает 100% загрузку CPU программой. Как этого избежать? Цикл должен крутиться.


 
STK ©   (2005-01-14 00:54) [1]

Поставь sleep(1).

Но тогда у тебя скорость выполнения этого цикла упадёт где то примерно в 10000 раз.
Т.е. Sleep тормозит, но не нагружает(выбирай между скоростью и загруженностью).
Вот мой пример:

procedure TNewThread.Execute;
var
 c, d: real;
 x:integer;
 s, f: integer;
begin
randomize;
 SetName;
 c:=0;
 Form1.Button3.Enabled:=false;
 { Place thread code here }
  d:=Random(435897743)*0.25;
  if form1.CheckBox1.Checked then begin
    s := 400; f:= 5;
  end
  else begin
    s:= 4000000; f:=0;
  end;
 for x := 1 to s do
 begin
   c:=sqr(sqrt(Abs(d*Sin(x*(2/3.14159)*3.1257))));
   sleep(f);
 end;

  Form1.label2.Caption:=FloatToStr(c);
 Form1.Button3.Enabled:=true;
end;

По скорости они почти одинаковы.
Но это как ты понимаеш зависит от проца.

Не уверен конечно что это вариант.


 
Юрий Зотов ©   (2005-01-14 01:00) [2]

Лучший вариант - вызвать внутри цикла одну из функций WaitForXXX. Надо только найти этот XXX. А уж если не удастся - [1].


 
Gear   (2005-01-14 01:01) [3]

Да спасибо! Помогло. Я параллельно догадался что 1 это очень мало, а количество оборотов понизит в разы.


 
Германн ©   (2005-01-14 03:39) [4]

Принимаю варианты [1] и [2].
Но хочется спросить автора и отвечающих: А чем 100% загрузка процессора так плоха?
В многозадачной среде, какой является Windows все равно любому процессу будет выделено время.
И почему мой процесс не должен занимать все 100% времени, которое ему выделил Windows?
Имхо, о приоритетах тут не было речи.


 
Kerk ©   (2005-01-14 04:54) [5]

Германн ©   (14.01.05 3:39) [4]
Человек задал вопрос как снизить нагрузку. Ему ответили. О приоритетах речь правда не шла. :)


 
VMcL ©   (2005-01-14 07:52) [6]

>>Юрий Зотов ©  (14.01.05 01:00) [2]

[offtopic]

Вы как бы сделали вид, что не заметили в [1] обращения к компонентам VCL без синхронизации с основной кодовой нитью?

:o)

[/offtopic]


 
sniknik ©   (2005-01-14 08:49) [7]

тока вчера обьяснял почему (ветка рядом)
http://delphimaster.net/view/1-1105397600/

> Но хочется спросить автора и отвечающих: А чем 100% загрузка процессора так плоха?
зачем нагружать проц безсмысленным циклом? если по логике все одно нужно ждать того или иного события от системы (в основном так). а так, да хрен с ним пусть будет 100% и "подвисания" в остальныж прогах (а ведь когдато пишуший догадается о приоритетах "таймкритикал" на процесс и поток, и естественно поставит, важность то невообразимая у проги ;о))) только я такими прогами лучше поостерегусь пользоваться.

VMcL ©   (14.01.05 07:52) [6]
не помогает... вот в той ветке обратил на это внимание а толку? видать пока сами не нарвутся на клюки от этого, не желают понять. ведь работает же! :(


 
sniknik ©   (2005-01-14 08:51) [8]

клюки = глюки ;о))


 
Юрий Зотов ©   (2005-01-14 14:19) [9]

> VMcL ©   (14.01.05 07:52) [6]

Если честно, код я даже и не смотрел. Там в начале сказано: Sleep(1) - после этого все ясно и больше ничего не надо. А код и все, что в нем - это уже не по сабжу. Все равно он будет заменен своим кодом.



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

Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.052 c
3-1104242406
Georji
2004-12-28 17:00
2005.01.30
Добавление поля


3-1104141098
PSH
2004-12-27 12:51
2005.01.30
Разрыв страницы в Report Builder Pro 7.03


3-1104314918
Gemini
2004-12-29 13:08
2005.01.30
Как добавить драйвер MS SQL?


1-1105652802
Gear
2005-01-14 00:46
2005.01.30
100% загрузка CPU бесконечным циклом в потоке.


3-1103790797
Russko
2004-12-23 11:33
2005.01.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский