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

Вниз

И опять поток...   Найти похожие ветки 

 
skywalker   (2002-03-06 14:02) [0]

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


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

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


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

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


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

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


 
VuDZ   (2002-03-06 17:14) [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%, так что если пораставлять такие строки в потоке - его присутствие будет почти незаметно при любом сотояние ситемы.


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

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

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



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

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

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


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

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



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
14-26271
Morfey
2002-03-30 02:24
2002.05.09
Вопрос значит такой...


1-26155
vap
2002-04-25 02:00
2002.05.09
SMAPLS_IP_EBP_12


1-26176
AndreyS
2002-04-25 13:53
2002.05.09
Переопределенее принадлежности к контейнерам.


1-26121
MegaVolt
2002-04-24 10:31
2002.05.09
---|Ветка была без названия|---


1-26075
Aleksandr
2002-04-25 14:21
2002.05.09
Как убить загружающуюся DLL на этапе запуска программы?