Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.005 c
4-26301
Геральт
2002-03-07 18:58
2002.05.09
Taskbar


1-26141
hooky-mars
2002-04-21 19:01
2002.05.09
Form&MessageBox


6-26216
cypher
2002-02-17 23:54
2002.05.09
Конкетный вопрос


1-26148
SerKom
2002-04-24 23:41
2002.05.09
сервис NT


14-26274
drpass
2002-04-01 05:08
2002.05.09
Новые возможности Delphi6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский