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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
14-1105435700
Ozone
2005-01-11 12:28
2005.01.30
Как узнать модель телефона.


3-1104297254
Janb
2004-12-29 08:14
2005.01.30
ODBC driver глючит или что я делаю неправильно?


14-1105687741
Ihor Osov'yak
2005-01-14 10:29
2005.01.30
Нужен совет о комплектации системы (сpu, monitor)


1-1105516483
kull
2005-01-12 10:54
2005.01.30
Повторяющийся код.


11-1087418434
Sormy
2004-06-17 00:40
2005.01.30
Как преобразовывать палитры цветов?