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

229
26 ноября 2016, 18:54

Консольное приложение.
Есть цикл, в нем по очереди вызываются 3 метода класса. Нужно чтобы при нажатии на кнопку с клавиатуры (к примеру 'A') цикл останавливался, с возможностью продолжения по кнопке (к примеру 'S').

Answer 1

Например, как-то так:

char c;
while(1)
{
    ...
        if(kbhit()) // если была нажата какая-нибудь клавиша
        {
            if((c=getch())=='A') // если это буква 'A'
            {
                while(getch()!='S'); // то висеть на ф-ии приёма символа, пока он не будет равен 'S'
            }
        }
}
Answer 2

Выглядеть это могло бы как-то так:

volatile bool pauseCondition = false;
while (true) {
    while (pauseCondition) sleep(100);
    doPayloadIteration();
}

Тем временем на pauseCondition может воздействовать другой поток, который обрабатывает пользовательсткий ввод.

Answer 3

Что-то типа

for(...)
{
    ....... // Бурная деятельность
    if (kbhit())
    {
        char c = getch();
        if (c == 'A')
        {
            while(getch() != 'S');
        }
    }
}

не устроит?... Или я неверно понял вопрос?

READ ALSO
emplace_back для int

emplace_back для int

‒ Ты понимаешь, что происходит? ‒ Тебе объяснить? ‒ Объяснить я и сам могу

328
Наследование абстрактного класса в C++

Наследование абстрактного класса в C++

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

540
Как в Linux создавать сокеты на С++ с STCP?

Как в Linux создавать сокеты на С++ с STCP?

Делаю всё по книге "Создание сетевых приложений в среде Linux: Руководство разработчика"Не компилируется

373
Разбиение чисел на простые множители

Разбиение чисел на простые множители

Как быстро разбить числа до 10ˆ18 на простые множители?

314