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

Вниз

Поток загружает процессор на 100%   Найти похожие ветки 

 
HydraMarat   (2004-08-21 00:27) [0]

Здравствуйте. На днях обнаружил интересную особенность работы потоков. Класс, чей метод Execute содержит пустой цикл repeat-until, загружает процессор, если верить Диспетчеру задач, на все 100%! И судя по работе других программ это недалеко от истины. Но ведь цикл то пустой! Когда-то писал прогу, так там repeat-until включал/отключал Action"ы и все пахало... Запустил сегодня ее (для проверки) и тоже - 100% загрузка! В чем же дело? Разъясните, пожалуйста! У меня есть подозрение, что дело вообще в Windows XP, а не в Delphi...

Спасибо.

P.S. Установка приоритета в tpLowest ничего не изменила...


 
VMcL ©   (2004-08-21 00:48) [1]

procedure TMyThread.Execute;
begin
 while not Terminated do
   Sleep(1);
end;


 
Sergey_Masloff   (2004-08-21 00:49) [2]

HydraMarat   (21.08.04 00:27)  
А чего тут непонятного? Все как и должно быть.


 
HydraMarat   (2004-08-21 01:20) [3]

Как это как должно быть? Поток не шиша не делает, а другие проги виснут? А если их будет с двадцатник (потоков)? Множество ведь прог используют потоки, а 100% загрузки проца я не вижу. Может чуть по-подробнее объясните...


 
мимо проходящий   (2004-08-21 01:29) [4]

> HydraMarat   (21.08.04 01:20) [3]

Да, множество прог используют потоки, и конечно все они содержат пустые циклы...


 
HydraMarat   (2004-08-21 02:27) [5]

Так все-таки, разъясните кто-нибудь: почему у меня 100%, а других прог меньше? Или действительно нужно сделать как VMcL предложил?


 
мимо проходящий   (2004-08-21 04:14) [6]

начинай с малого, с основ, чтобы потом подобных вопросов не возникало...


> HydraMarat   (21.08.04 02:27) [5]

как в твоем случае лучше, так и сделай.
для пустого цикла, можно как показал VMcL


 
Mim1 ©   (2004-08-21 08:13) [7]

Думается, что если поток ничего не делает, то он не должен гонять пустой цикл, а должен быть остановлен при помощи suspend или средств синхронизации (про которые советую почитать).

Делать то что предложил VMcL в нормальной программе считаю глупым, потому что ресурсы процессора расходуются на выполнение холостой, ненужной работы.


 
TUser ©   (2004-08-21 08:20) [8]


> Или действительно нужно сделать как VMcL предложил?

Нужно сделать именно так. Sleep(мало) сообщает системе, что поток не хочет работать в течении ближайщих ... мсек. Поэтому появляется возможность мередать управление другим потокам.


 
Verg ©   (2004-08-21 10:04) [9]


> Поток не шиша не делает, а другие проги виснут?


Как это "не шиша"? Как раз он и крутит тот самый цикл. Этим он и занят. Или ты думаешь, что операционка должна вникать в смысл происходящего в каждом потоке и делать выводы о том делом он занят или просто "балду гоняет"? :))

Если потоку нечем заняться, то он должен сам и "сказать" об этом операционке.
см.

> [7] Mim1 ©   (21.08.04 08:13)


 
Anatoly Podgoretsky ©   (2004-08-21 10:29) [10]

HydraMarat   (21.08.04 01:20) [3]
Как это ни чего, делает и еще как, на все 100 процентов крутит пустой цикл. Бездарно греет процессор.


 
HydraMarat   (2004-08-21 11:49) [11]

Всем огромное спасибо! Скорее всего буду через Event"ы с ним работать...

Возник еще вопросик. Если, например, поток что-то выполняет (конкретнее, открытие базы), а тут вдруг прогу закрывают... Ну, открытие базы у меня с критической секцией, так что ее закрытия я точно дождусь, а вот далее виснет на inherited Destroy. Подключил Classes.pas и получилось, что зависает в деструкторе TThread на WaitFor. Как же быть? Может что посоветуете?

Спасибо.



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

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
1-1093032545
Саша
2004-08-21 00:09
2004.09.05
mp3 в Delphi


4-1090339359
parovoZZ
2004-07-20 20:02
2004.09.05
TranslateMessage()


3-1092041079
ivc_andr
2004-08-09 12:44
2004.09.05
не могу соединиться с сервером приложений


14-1092527888
василий
2004-08-15 03:58
2004.09.05
Windows XP


14-1092679960
F3nix
2004-08-16 22:12
2004.09.05
Программа подсчета необходимости покупки