Бесконечный цикл: определение и выход из бесконечного цикла - PullRequest
4 голосов
/ 16 марта 2012

Как бы вы определили, что цикл является бесконечным циклом и вырвется из него.

Есть ли у кого-нибудь алгоритм или может помочь мне в этом.

Спасибо

Ответы [ 2 ]

8 голосов
/ 16 марта 2012

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

Идея доказательства проста:

  1. Предположим, у вас был такой алгоритм A.
  2. Создайте программу B, которая вызывает A для себя [на B].
  3. если A отвечает «программа остановится» - выполнить бесконечный цикл
  4. иначе [A ответы B не останавливается] - остановитьбезотлагательно

Теперь предположим, что вы вызываете A для B - ответ будет определенно неправильным, поэтому A не существует.

Примечание: вышесказанное НЕ является формальным доказательством, это просто набросок.

5 голосов
/ 16 марта 2012

Как написано другими, это не может быть определено.

Однако, если вы хотите провести некоторую проверку, вы можете использовать шаблон проектирования WatchDog.Это отдельный поток, который проверяет, активна ли задача.Ваш собственный поток должен регулярно давать сигнал о том, что он жив.Убедитесь, что этот сигнал не установлен внутри вашего (бесконечного) цикла.

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

...