Приложение C ++ принимает 100% циклов процессора через некоторое время

В своем приложении я использовал функции ООП, такие как класс, наследование и т. Д.
Я не использовал ни одного потока в приложении до сих пор, после некоторого периода времени это занимает 100% циклов ЦП.
Может ли кто-нибудь помочь мне выяснить, каковы возможные причины?

-3

Решение

Наиболее вероятная причина — бесконечный цикл (как уже упоминалось Джогожапаном). И лучший способ выяснить это было бы использовать отладчик и посмотреть, где код застрял, когда он начинает использовать высокую загрузку процессора).

2

Другие решения

Если вы не запускаете какую-либо функцию, которая занимает много времени, чтобы сделать действительно сложную «вещь», это, вероятно, вызвано неким циклом, в котором нет паузы. Искать что-то вроде do {...} while (!exit); чтобы исправить это, вам нужно вызвать функцию, которая возвращает время ОС, и поместить вызов API в sleep(x) функция, которая эффективно приостанавливает вашу программу на «х» миллисекунд. Если вы используете Windows, это может быть сделано #include <windows.h> а затем положить sleep(10); в конце цикла. «10» является произвольным; но обратите внимание, что меньшие значения имеют тенденцию действовать случайным образом, и все, что меньше 33, хорошо, если у вас много графики (для 30 кадров в секунду), и 100 или около того хорошо для событий, управляемых событиями, которые в основном включают нажатие или меню.

1

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

Но если вы действительно чувствуете, что он использует циклы процессора, хотя этого не следует делать, вот несколько общих стратегий для решения этой проблемы:

  1. Напишите код, который вряд ли вызовет такие проблемы. Используйте модульные тесты (с хорошим охватом входного диапазона) и избегайте петель с чрезмерно сложными условиями выхода. (Для простых или стандартных ситуаций, используя встроенные алгоритмы, такие как std::for_each, std::generate и т.д. также помогает избежать бесконечных петель.)

  2. Используйте сообщения журнала, чтобы вы могли отслеживать, что ваша программа делает, даже после нескольких дней, проверяя журнал. Если вас беспокоит дополнительная вычислительная нагрузка, вызванная большим количеством сообщений журнала, вы можете реализовать их таким образом, чтобы во время выполнения или даже во время компиляции можно было включить или отключить их или выбрать уровень детализации. Существуют различные рамки ведения журналов, чтобы помочь (есть даже ТАК вопрос, перечисляя их, хотя он закрыт и может быть удален).

  3. Если вышеописанное не помогло, и у вас возникла ситуация, подобная описанной в вашем посте, используйте отладчик, чтобы определить, какая часть кода застряла в вашем процессе. Вы можете запустить программу в отладчике в течение нескольких дней или недель, если необходимо. Когда он достигает 100% загрузки ЦП, прервите и осмотрите стек вызовов, чтобы увидеть, где находится процесс. Бесконечные циклы (или подобные явления) могут возникать на относительно высоком уровне, поэтому вам может потребоваться пройтись вверх и вниз по стеку, чтобы понять, где происходит цикл. Вы также можете продолжить процесс и снова прервать его позже.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector