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

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

И опять поток...


skywalker ©   (2002-03-06 14:02:00) 

Кто нибудь знает, как сделать так, чтоб проц не загружался на 100 проценотов?
VuDZ помоги plz.


Suntechnic   (2002-03-06 19:24:00) [1]

>Fellomena (06.03.02 18:57)
Да не помогут тут никакие Application.ProcessMessage (или sleep(0)). Если это отдельный поток(не основной поток программы а к.л. дополнительный) то приложение и так в состоянии обрабатывать сообщения, т.к. дополнительный поток ничего не блокирует. А sleep просто его приостоновит. "Приостоновит" это означает, что на период ожидания поток просто не будет выполнять свои прямые обязанности: что то делать!!! Ещё раз повторяю, для этих целей используются Wait-ф-ции.


Fellomena   (2002-03-06 18:57:00) [2]

Хех... вопрос и впрямь не определённый.
Но, действительно, если есть что-то типа
while true do
begin
тра ля ля
end;

то Application.ProcessMessage (или sleep(0)) в теле цикла позволит приложению принимать сообщения из очереди и обрабатывать их.
Если хочешь подробный ответ - ставь конкретный вопрос :)


Suntechnic   (2002-03-06 18:38:00) [3]

Ответы кто во что горазд :) Вы перечитайте вопрос. Что из него можно понять? Из-за чего процессор занят на 100%? Ответа никто не знает, но зато все советуют. Посоветую и я :)

Если у тебя в отдельном потоке стоит какой-нибудь вечный цикл, то он как раз и будет занимать всё процессорное время. В этом случае следует использовать т.н. Wait ф-ции, а sleep тебе по большому счёту здесь не поможет, так как он просто прервёт выполнение потока на определённый промежуток времени.


VuDZ   (2002-03-06 17:14:00) [4]

поставь приоритет Low - SetProorityClass() - IDLE_PRIORITY_CLASS для процесса и/или для потоко THREAD_PRIORITY_IDLE SetThreadPriority()

При этом, проц будёт загружен только тогда, когда ниодна задача не выполняется (я так в 3DMax"e рендерю сцены при просмотре фильмов).


> Просто вставляй где надо sleep(1) - sleep(0) по слухам не
> работает :-(( это отдаст остаток времени процессору. По
> опыту получается не 100 а 4-5% чаще всего

Sleep(0) - и только он - отдаёт неиспользуемый остаток кванта времени потока другому потоку

есть другой способ:

void thr(void*){
for (float f = 1;;f++){
float f2 = (1.0 + f) / (1.0 /f) * (f * 2.0);
printf("%f\n", f2);
Sleep(100);
}
}

у извеяй за С, но основной смысл - в выделенной строке. Без неё проц грузиться на 100%, а с не - 1..4%, так что если пораставлять такие строки в потоке - его присутствие будет почти незаметно при любом сотояние ситемы.


Алексей Петров   (2002-03-06 15:41:00) [5]

priority в данном случаи не поможет. Процент загрузки процессора - это часть времени, занимаемая всеми потоками кроме System Idle которого приоритет ниже любого пользовательского потока.


MBo   (2002-03-06 14:32:00) [6]

если у тебя отдельный поток, то посмотри еще priority


Romkin   (2002-03-06 14:10:00) [7]

Просто вставляй где надо sleep(1) - sleep(0) по слухам не работает :-(( это отдаст остаток времени процессору. По опыту получается не 100 а 4-5% чаще всего


Наверх

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