Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15

Как остановить бесконечный цикл

10.03.2020, 21:01. Показов 3802. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой кусок кода
JavaScript
1
2
3
4
5
6
7
8
9
10
let run = true
while (run){
   await page.waitFor(1000);
   timer++;
   console.log('timer',timer);
   //тут необходимо как то отследить пользовательский ввод и если он произошел то run = false;
   if(input == true){
        run = false;
   }
}
Как мне сделать так что б скажем по нажатию на Enter или Esc
run = false;
и цикл бы останавливался
Ctrl + C не подходит так как он полностью тушит программу, а мне бы хотелось только выйти из этого цикла
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2020, 21:01
Ответы с готовыми решениями:

Как остановить бесконечный цикл?
У меня есть скрипт, который отслеживает, запущен ли процесс, и если программа закрывается, то запускает её по новой. Как можно прекратить...

Как остановить бесконечный цикл?!
Написал программу, ошибся, и она запустила бесконечный цикл. На что нажать (на клавиатуре) что бы его остоновить? :(

Как остановить по ошибке запущенный бесконечный цикл while?
Длительное время работаю с php но ранее не сталкивался с подобной ситуацией, когда по ошибке был запущен бесконечный цикл while. Код...

5
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
11.03.2020, 07:32
Цитата Сообщение от vipTelnet Посмотреть сообщение
что б скажем по нажатию на Enter или Esc
перед вызовом цикла ты должен запустить "обработчик клавиш". Там получаешь коды всех нажатых клавиш. И обрабатываешь нужные...

лови кусок одного из моих проектов... нужен модуль keypress
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    var keypress = require('keypress');
    keypress(process.stdin);
    process.stdin.on('keypress', function (ch, key) {
        
        if (key && key.ctrl && key.name == 'c') { return; }
        
        if (key && key.name == 'return') { app_terminate(); }
        if (key && key.name == 'escape') { app_terminate(); }
        if (key && key.name == 'space') { app_terminate(); }
        if (key && key.name == 'q') { app_terminate(); }
        
        console.log('got "keypress"');
        console.log(key);
    });
    process.stdin.setRawMode(true);
    process.stdin.resume();
0
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15
11.03.2020, 19:20  [ТС]
У меня лично такой вот пример после запуска вообще перестает реагировать на любые кнопки с клавиатуры, даже Ctrl + C не срабатывает, помогает только перезагрузка консоли.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
let keypress = require('keypress');
let run = true;
let timer = 0;
 
// make `process.stdin` begin emitting "keypress" events
keypress(process.stdin);
 
// listen for the "keypress" event
process.stdin.on('keypress', function (ch, key) {
  console.log('got "keypress"', key);
});
 
process.stdin.setRawMode(true);
process.stdin.resume();
 
const msleep = (milliSeconds) =>
    Atomics.wait(
        new Int32Array(new SharedArrayBuffer(4)),
        0, 0, milliSeconds
    )
;
 
while (run){
    msleep(1000);
    timer++;
    console.log('timer',timer);
}
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
12.03.2020, 06:56
Цитата Сообщение от vipTelnet Посмотреть сообщение
после запуска вообще перестает реагировать
лень тестировать (создавать пустой проект). Если что-то не работает - разбей на части.
1) пустой проект (без цикла) зависает?
2) клавиатура работает без цикла?
3) если все дело в цикле - значит его надо переделать. возможно ты заблокировал EventLoop (недавно нашел в ютюбе неплохое пояснение принципов). Суть - пока работает "тело цикла" - другим операциям не достается "возможность поуправлять". Надо разорвать цикл на назависимые колбэки.

например (грубое решение)

JavaScript
1
2
3
4
function next(){
   msleep... старое "тело"
   setInterval(next)
}
0
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15
14.03.2020, 20:37  [ТС]
вот пример бесконечного цикла не блокирующего Event loop
Выход из цикла while по нажатию на кнопку Esc
Выход из программы по нажатию по Ctrl + c

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const readline = require('readline');
const sleep = require('await-sleep');
let run = true;
let timer = 0;
 
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
 
process.stdin.on('keypress', (str, key) => {
    console.log(str, key, run);
    // Conditions on key
    if(key.name == 'escape'){
        run = false;
    }  
    if(key.name == 'c' && key.ctrl == true){
        process.exit(1);
    }
})
 
async function init(){
    while (run){
        await sleep(1000);
        timer++;
        console.log('timer',timer);
    }
}
init()
0
 Аватар для Hastin
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
30.03.2020, 13:25
Вы используете puppeteer или nightmare?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2020, 13:25
Помогаю со студенческими работами здесь

Как проще остановить бесконечный цикл, в котором есть пауза?
В общем столкнулся с такой задачей. При клике на Button1, запускается цикл, который должен прерываться по клику на Button2. Если в цикле...

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не грузил процессор. Избавиться от...

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

Как прекратить бесконечный цикл?
Здравствуйте, нужна помощь. Цель: сделать пульт управления 7-ми сегментным индикатором из 4х кнопок: 1 кнопка-вывод на левом индикаторе ...

Бесконечный цикл или как?
Товарищи, подскажите, как лучше реализовать. К примеру есть таблица `table` id_a | id_b 1 | 0 2 | 1 3 | 2 4 | 1 5 | 3 6...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru