РЕДАКТИРОВАТЬ:
Я хотел бы поблагодарить всех вас за быстрые ответы ^^ Sleep() работает так, как задумано, и эта программа больше не пожирает мой процессор! Я оставлю этот вопрос как есть, но чтобы все знали, что проблема с процессором решена целесообразно и профессионально :D
Кстати, я обязательно позабочусь о том, чтобы микрооптимизация была сведена к минимуму перед лицом более крупных и важных проблем!
================================================================================
По какой-то причине моя программа, консольный будильник, который я сделал для смеха и практики, чрезвычайно интенсивно использует процессор. Он потребляет около 2 МБ ОЗУ, что уже немало для такой маленькой программы, но время от времени он опустошает мой процессор с более чем 50% ресурсов.
Большую часть времени моя программа ничего не делает, кроме обратного отсчета секунд, поэтому я предполагаю, что именно эта часть моей программы вызывает такую большую нагрузку на мой процессор, хотя я не знаю, почему. Если это так, не могли бы вы порекомендовать способ сделать его меньше или, возможно, библиотеку, которую можно использовать вместо этого, если проблема не может быть легко решена?
/* The wait function waits exactly one second before returning to the *
* called function. */
void wait( const int &seconds )
{
clock_t endwait; // Type needed to compare with clock()
endwait = clock() + ( seconds * CLOCKS_PER_SEC );
while( clock() < endwait ) {} // Nothing need be done here.
}
Если кто-то просматривает CPlusPlus.com, это настоящая копия/вставка функции clock(), которую они написали в качестве примера для clock(). Почему комментарий //Nothing need be done here
такой тусклый. Я еще не совсем уверен, что именно делает clock().
Остальная часть программы вызывает две другие функции, которые активируются только каждые шестьдесят секунд, в противном случае возвращаются к вызывающей стороне и отсчитывают еще одну секунду, поэтому я не думаю, что это слишком интенсивно для ЦП, хотя я не знаю, это моя первая попытка при оптимизации кода.
Первая функция — это очистка консоли с помощью system("cls")
, что, я знаю, очень, очень медленно и не очень хорошая идея. Я буду менять этот постпоспешность, но, поскольку он активируется только каждые 60 секунд и наблюдается заметный всплеск задержки, я знаю, что большую часть времени проблема не в этом.
Вторая функция перезаписывает содержимое экрана с обновленным оставшимся временем также только каждые шестьдесят секунд.
Я отредактирую функцию, которая вызывает ожидание, очистку экрана и отображение, если будет ясно, что проблема не в этой функции. Я уже пытался ссылаться на большинство переменных, чтобы они не копировались, а также избегал endl
, так как я слышал, что это немного медленно по сравнению с \n
.
std::endl
на'\n'
, пока вы не поймете, что на самом деле делает ваш код медленным или загружает процессор. Попытки исправлять и возиться с крошечными несущественными вещами, когда есть гораздо более серьезные проблемы, которые нужно решить, только делают ваш код все более нечитаемым и неподдерживаемым. - person Tyler McHenry   schedule 27.04.2010