Форум: "WinAPI";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];
ВнизИ опять поток... Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c