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

Вниз

Поток загружает процессор на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.028 c
14-1092310311
olookin
2004-08-12 15:31
2004.09.05
Вы считаете, что программы, поставляемые в составе Delphi...


3-1092073056
Владимир
2004-08-09 21:37
2004.09.05
Ошибка в ADOQuery


14-1092636996
Реактор
2004-08-16 10:16
2004.09.05
Проблемы с высвобождением памяти


14-1091941670
Виктор П
2004-08-08 09:07
2004.09.05
Опрос: Рейтинг форум-клиентов.


1-1092730717
ceval
2004-08-17 12:18
2004.09.05
как в Excel сделать заголовок столбца (по середине) и





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский