Главная страница
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
4-26297
VAlekseyS
2002-03-05 09:21
2002.05.09
Копирование каталогов


6-26214
[Genius]
2002-02-23 07:36
2002.05.09
Idhttp


14-26247
Baz
2002-04-02 06:39
2002.05.09
У меня со зрением что-то?


4-26304
Керик
2002-03-08 05:28
2002.05.09
Сделать таймер


3-26000
DRIVER
2002-04-04 17:25
2002.05.09
Где вы мастера!!!!!!!???????