![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
100% загрузка CPU бесконечным циклом в потоке. [D7, WinXP]
Gear © (2005-01-14 00:46:00)Обнаружил что у меня бесконечный цикл в отдельном потоке вызывает 100% загрузку CPU программой. Как этого избежать? Цикл должен крутиться.
Юрий Зотов (2005-01-14 14:19:00) [1]> VMcL © (14.01.05 07:52) [6]
Если честно, код я даже и не смотрел. Там в начале сказано: Sleep(1) - после этого все ясно и больше ничего не надо. А код и все, что в нем - это уже не по сабжу. Все равно он будет заменен своим кодом.
sniknik (2005-01-14 08:51:00) [2]клюки = глюки ;о))
sniknik (2005-01-14 08:49:00) [3]тока вчера обьяснял почему (ветка рядом)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1105397600&n=0
> Но хочется спросить автора и отвечающих: А чем 100% загрузка процессора так плоха?
зачем нагружать проц безсмысленным циклом? если по логике все одно нужно ждать того или иного события от системы (в основном так). а так, да хрен с ним пусть будет 100% и "подвисания" в остальныж прогах (а ведь когдато пишуший догадается о приоритетах "таймкритикал" на процесс и поток, и естественно поставит, важность то невообразимая у проги ;о))) только я такими прогами лучше поостерегусь пользоваться.
VMcL © (14.01.05 07:52) [6]
не помогает... вот в той ветке обратил на это внимание а толку? видать пока сами не нарвутся на клюки от этого, не желают понять. ведь работает же! :(
VMcL (2005-01-14 07:52:00) [4]>> Юрий Зотов © (14.01.05 01:00) [2]
[offtopic]
Вы как бы сделали вид, что не заметили в [1] обращения к компонентам VCL без синхронизации с основной кодовой нитью?
:o)
[/offtopic]
Kerk (2005-01-14 04:54:00) [5]Германн © (14.01.05 3:39) [4]
Человек задал вопрос как снизить нагрузку. Ему ответили. О приоритетах речь правда не шла. :)
Германн (2005-01-14 03:39:00) [6]Принимаю варианты [1] и [2].
Но хочется спросить автора и отвечающих: А чем 100% загрузка процессора так плоха?
В многозадачной среде, какой является Windows все равно любому процессу будет выделено время.
И почему мой процесс не должен занимать все 100% времени, которое ему выделил Windows?
Имхо, о приоритетах тут не было речи.
Gear (2005-01-14 01:01:00) [7]Да спасибо! Помогло. Я параллельно догадался что 1 это очень мало, а количество оборотов понизит в разы.
Юрий Зотов (2005-01-14 01:00:00) [8]Лучший вариант - вызвать внутри цикла одну из функций WaitForXXX. Надо только найти этот XXX. А уж если не удастся - [1].
STK (2005-01-14 00:54:00) [9]Поставь 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;
По скорости они почти одинаковы.
Но это как ты понимаеш зависит от проца.
Не уверен конечно что это вариант.