Форум: "Основная";
Текущий архив: 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.039 c