Почему бесконечные циклы использования?

Я смог вытащить, удалив файл, который вызывал проблему, но на самом деле это не лучшее решение.

8
задан Community 23 May 2017 в 12:17
поделиться

14 ответов

Цикл как:

while (true)
{
    // do something
    if (something else) break;
    // do more
}

позволяет Вам убежать из цикла в середине, а не в запуске (в то время как/для) или конец (делают - в то время как).

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

27
ответ дан 5 December 2019 в 04:28
поделиться

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

11
ответ дан 5 December 2019 в 04:28
поделиться
while( 1 )
{
    game->update();
    game->render();
}

Править: Таким образом, мое приложение существенно базируется вокруг бесконечного цикла, и я не могу быть побеспокоен для рефакторинга всего только, чтобы иметь эстетическую чистоту всегда завершения путем уменьшения с конца основных ().

8
ответ дан 5 December 2019 в 04:28
поделиться

Конечные автоматы. Они, как предполагается, не заканчиваются, пока Вы не достигаете конечного состояния, в которой точке Вы повреждаетесь или возвращаетесь.

8
ответ дан 5 December 2019 в 04:28
поделиться

Это - неполный пример, потому что он может быть пересмотрен, чтобы быть испытательным шлейфом конца без потери ясности, функции или производительности.

int scoped_variable;
do {
    scoped_variable = getSomeValue();
} while (scoped_variable != some_value);

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

4
ответ дан 5 December 2019 в 04:28
поделиться

Почти все приложения используют бесконечный Основной цикл.;)

3
ответ дан 5 December 2019 в 04:28
поделиться

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

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

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

2
ответ дан 5 December 2019 в 04:28
поделиться

Я использую их, чтобы записать демонам Linux / сервисы, которые цикл до уничтожает / другие сигналы завершения получены.

1
ответ дан 5 December 2019 в 04:28
поделиться

Существуют другие вопросы, касающиеся, если/когда нормально использовать break в цикле. Давайте предположим, что мы соглашаемся, что это иногда в порядке. При тех обстоятельствах (надо надеяться, редкий) я использовал бы бесконечный цикл, если существует много завершающихся условий и никакое идентифицируемое "основное" условие завершения.

Это избегает длинного ряда разъединений (or's) и также привлекает внимание читателя к тому, что там может (почти наверняка быть) быть перерывами в цикле.

В конечном счете это - вопрос вкуса.

1
ответ дан 5 December 2019 в 04:28
поделиться

Кроме бесконечных циклов ситуаций со встроенными системами всегда действительно:

Repeat
   Something
Until Exit_Condition;

Но иногда Exit_Condition не что-то, что может на самом деле быть оценено в конце цикла. Вы могли всегда устанавливать флаг, использовать тот флаг, чтобы пропустить остальную часть цикла и затем протестировать его в конце, но это означает тестирование его по крайней мере дважды (код немного медленнее), и лично я нахожу это менее ясным.

Существуют времена, когда торговая ясность для скорости имеет смысл, но что-то, что не дает ни ясности, ни скорости только, чтобы быть технически корректным? Походит на плохую идею мне. Любой компетентный программист знает, что, в то время как (верный) означает, условие завершения где-нибудь в цикле.

0
ответ дан 5 December 2019 в 04:28
поделиться

Я раньше использовал их при ожидании нескольких потоков для завершения в c#, но теперь я использую класс ThreadPool.

0
ответ дан 5 December 2019 в 04:28
поделиться

Бесконечные циклы полезны главным образом в процессах демона/сервиса или основном цикле в игре. Можно даже стать милыми с ними, например:

const bool heatDeathOfTheUniverse = false;
do 
{
     // stuff
} while(!heatDeathOfTheUniverse);

Они не должны использоваться для "ожидания" вещей как потоки, как был предложен Жарким. Можно использовать метод Соединения объекта потока для этого.

Однако, если Вы находитесь в ситуации, где Ваш технический вывод говорит, "бесконечные циклы являются verboten и так являются несколькими возвратами метода/функции и повреждениями", можно также сделать материал как это:

bool done = false;
while(!done) 
{
    if(done = AreWeDone()) continue; // continue jumps back to start of the loop   
} 

Конечно, если Вы, технический вывод вынуждает Вас сделать такие вещи, необходимо начать искать новое задание.

Для получения дополнительной информации на продолжать ключевом слове см. эту статью MSDN.

1
ответ дан 5 December 2019 в 04:28
поделиться

Веб-серверы используют бесконечный цикл while:

while(true)
{
    //Do something like respond to requests
}

Они не должны заканчиваться, если вы не закроете приложение веб-сервера.

1
ответ дан 5 December 2019 в 04:28
поделиться

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

while ( true ) { go2Target ( ) ; }

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

Возможно, пуристы предпочли бы

while ( ! blown2Bits ( ) ) { go2Target ( ) ; }

, но как тогда реализовать метод blow2Bits? что бы это значило, если бы blow2Bits вернул истину?

4
ответ дан 5 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: