Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 12:47   #1
overhandos
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 23
По умолчанию while грузит процессор

Чтото изменил в настройках или скрипте, но циклы while, for стали оч сильно грузить проц, до этого нагрузка была нулевой, не могу понять что изменилось с прошлого раза)
overhandos вне форума Ответить с цитированием
Старый 06.05.2012, 13:00   #2
geologg
 
Аватар для geologg
 
Регистрация: 27.01.2012
Сообщений: 9
Сообщение

Цитата:
Сообщение от overhandos Посмотреть сообщение
Что-то изменил в настройках или скрипте, но циклы while, for стали оч сильно грузить проц, до этого нагрузка была нулевой, не могу понять что изменилось с прошлого раза)
Может быть изменилось то, что вы изменили?
Выражение "разбить винчестер" не обещает Вам увидеть Вашего Админа, молотящего ружьем об дерево.
geologg вне форума Ответить с цитированием
Старый 06.05.2012, 13:34   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Может быть изменилось то, что вы изменили?
Капитан Очевидность
Цитата:
overhandos
Код то какой? Антивирус случайно не начал наседать на твою программу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2012, 06:48   #4
overhandos
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 23
По умолчанию

Стал) Сейчас простой цикл while(true){cout<<"!";} уже подгружает проц, до этого такого не наблюдал, копался в подключаемых либах, вроде ничего особенного не делал более.
overhandos вне форума Ответить с цитированием
Старый 07.05.2012, 07:49   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

попробуй что то типа:

Код:
while(true)
{
    Sleep(10);
    cout<<"!";
}
_Bers вне форума Ответить с цитированием
Старый 07.05.2012, 07:58   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
простой цикл while(true){cout<<"!";}
Нифинта себе простой!
Тут же никакой задержки нет. Конечно он будет грузить проц на все 80
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2012, 09:53   #7
overhandos
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
попробуй что то типа:

Код:
while(true)
{
    Sleep(10);
    cout<<"!";
}
а есть какиенибудь еще аналоги разгрузки процессора и как слип помогает снять нагрузку можно поподробнее?)
overhandos вне форума Ответить с цитированием
Старый 07.05.2012, 17:11   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от overhandos Посмотреть сообщение
а есть какиенибудь еще аналоги разгрузки процессора и как слип помогает снять нагрузку можно поподробнее?)
Я на самом деле не очень хорошо в этой теме разбираюсь.
Поэтому, могу и ошибаться...

Всякие там Виндовсы/Линуксы, как ты знаешь - многозадачные системы.

Это означает, что в памяти компьютера могут быть загружены и одновременно работать сразу несколько программок.

Однако единовременно на одном ядрышке исполняться может только один кусочек кода. Поэтому, допустим на одноядерной машине такая многозадачность фиктивная. На самом деле все эти программки исполняются не одновременно, а по очереди: чуть чуть поработала одна, уснула. Проснулась следующая, поработала - тоже уснула.

Внешне создаётся впечатление, что они работают одновременно.

Каждая такая программка - это отдельный "процесс". Причем у одного приложения может быть несколько процессов. А процессы могут иметь несколько потоков.

Суть в том, что у каждого такого процесса (или потока) есть его квант времени. Когда он истекает - операционная система передаёт управление другому процессу(потоку).

Получается, что процесс "проснулся" и начал выполнять работу (нагружает проц и тп). Потом его время истекает, и он "засыпает".

Sleep() указывает системе, что твой поток должен уснуть на некоторое количество миллисекунд.
И пока таймер не истечет - поток не будет просыпаться, и нагружать проц.

Если тебе нужно осуществить задержку, то ты делаешь слип, и у других процессов в системе появляется возможность спокойно работать.

Твой процесс как бы отдаёт им своё время.

В данном случае задержка на 10 милисек - это очень мало для человека (1000 милисек - это 1 секунда), но почти вечность для процессора.
За это время он успевает обслужить многие другие процессы.

Что бы не нагружать процессор, нужно просто помогать операционной системе распределять его время между твоим приложением и всей остальной системой.

/ps про "аналоги разгрузки процессора" - это тебе нужно курить работу с процессами/потоками. Тема называется "многопоточное программирование". Она не для новичка. Если очень интересно, то рекомендую книгу "Бобегайлов системное программирование"
С вязке с Windows там очень простыми словами описываются принципы разработки многопоточных и многопроцессовых приложений, и механизмы управления (всякие таймеры ожидания, семафоры, мьютексы, критические секции) и тп.

Последний раз редактировалось _Bers; 07.05.2012 в 17:18.
_Bers вне форума Ответить с цитированием
Старый 08.05.2012, 06:35   #9
overhandos
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 23
По умолчанию

Ога, примерно понял) Спасибо за разьяснение и наводку, буду изучать)
overhandos вне форума Ответить с цитированием
Старый 09.05.2012, 20:31   #10
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вставь в цикл Application->processmessages(); чтобы "висяка" не было.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грузит процессор на 50% Vikup Microsoft Office Excel 2 26.04.2012 08:50
svchost.exe грузит проц grafgrial Софт 7 05.01.2012 19:40
Грузит процесс ego30 Работа с сетью в Delphi 1 29.09.2011 19:42
Timer и advstring1DrawCell грузит процессор designer999 Общие вопросы Delphi 10 04.09.2011 13:48
svchost грузит систему Kn793 Windows 2 25.12.2009 13:04