Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нить и ЦП [D7, WinXP]


_BasiL_ ©   (2005-06-09 13:41:00) 

Здравствуйте!

Нити загружают ЦП на 100%, при этом комп не тормозит и другие приложения выполняются без тормозов.

Есть одна главная нить, она сканирует папки на наличие появления определенных файлов, при нахождении таких она раздает рабочим нитям (динамический массив нитей, сколько пользователь создаст) в буфер, соответственно контролирует равномерное заполнение буферов. У рабочей нить вначале пустой цикл с приоритетом IDLE в котором смотрится буфер и с интервалом в 3 секунды вызывается Synchronize процедуры которая на визуальном объекте выводит свой буфер, если в буфере оказался файл, она себя выставляет в NORMAL и начинает его обробатывать.

И вот такой парадокс, если создать одну рабочаю нить и ее запустить без главной нити сканирования, теоретически и практически рабочая нить крутится в этом пустом цикле, а проц подскакивает на 100%. Убирал из этого цикла Synchronize, оставит только такой код
FName='';
repeat
 if Terminated then Exit;
until FName<>'';

Загрузка ЦП всеравно 100%


Alexander Panov   (2005-06-09 14:28:00) [1]

Неправильно работаешь с потоками. Почитай про объекты синхронизации, например про Event, Semaphore.

см. также WaitForSingleObject.


Суслик   (2005-06-09 14:17:00) [2]

sleep(0)


_BasiL_   (2005-06-09 14:15:00) [3]

Помогло :-)


iskatel   (2005-06-09 13:43:00) [4]

sleep(ms)


Наверх

Титульная страница Поиск, карта сайта Написать письмо