Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/75: Рейтинг темы: голосов - 75, средняя оценка - 4.59
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211

Запуск\остановка цикла по нажатию клавиши

16.09.2014, 14:33. Показов 14095. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Вопрос как реализовать запуск и остановку цикла в консольном приложении по нажатию клавиши f12?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2014, 14:33
Ответы с готовыми решениями:

Остановка потока по нажатию клавиши
Проблема такая: я создал 2 потока, в одном работает счетчик, в другом выводит значение. Нужно по нажатию клавиши пробел остановить оба...

Выход из цикла по нажатию определенной клавиши
Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter цикл завершался, как такое сделать? ...

Старый борланд: как выйти из бесконечного цикла по нажатию заданной клавиши?
Короче нужно сделать прогу которая считает сколько отрицательных,положительных,равных 0 ввел пользователь. Реализовал.Пользователь вводит...

10
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
16.09.2014, 19:24
f12 считывается 2 байтами, поэтому надо что-то типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h> 
using namespace std;
 
int main()
{
    int c1,c2;
    do
    {
            c1=getch();
            cout<<c1<<" ";
            c2=getch();
            cout<<c2<<endl;
    }while(c1!=224 && c2!=134);
    cout<<"finish"<<endl;
    system("pause");
    return 0;
 
}
0
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211
16.09.2014, 19:41  [ТС]
Так не покатит, мне получается постоянно во время цикла нужно жмякать ф12, а надо так чтоб нажал ф12 програма работает, еще раз нажал -остановилась. Подозреваю что нужно как то с хоткеем работать,но с этим ни разу не имел дело.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.09.2014, 21:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <stdio.h>
 
inline bool IsKeyDown(int Key)
{
  return (GetKeyState(Key) & 0x8000) != 0;
}
 
int main()
{
  while(true){ // бесконечный цикл
      
      printf("Stop me!!! \n");
      
      if( IsKeyDown(VK_F12) ){ break; }
  }
  return 0;
}
Для виндовз и MVC как-то так.
1
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211
16.09.2014, 21:59  [ТС]
Почти, но еще нужно чтоб цикл и запускался по нажатию этой же клавиши
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.09.2014, 23:02
C++
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
#include <windows.h>
#include <stdio.h>
 
inline bool IsKeyDown(int Key)
{
  return (GetKeyState(Key) & 0x8000) != 0;
}
 
void PauseByKey(int Key)
{
    if( !IsKeyDown(Key) ) return;
    while( IsKeyDown(Key) ){};
    printf("Paused");
    while( !IsKeyDown(Key) ){};
    while( IsKeyDown(Key) ){};
}
 
int main()
{
  while(true){ // бесконечный цикл
      
      printf("Stop me!!! \n");
      
      PauseByKey( VK_F12 );
  }
  return 0;
}
1
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211
17.09.2014, 14:01  [ТС]
Если тебе не сложно, можешь прокоментить код? Хочется разобраться и понять, чтоб больше не возникало таких вопросов.

Добавлено через 8 минут
Еще такой вопрос допустим есть код
C++
1
2
3
4
5
6
7
8
while (1)
    {
    PauseByKey( VK_F12 );
    mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); // нажали правую кнопку мыши
    mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);// отпустили правую кнопку мыши ( НЕ ЗАБЫВАТЬ )
    //Sleep(3000);
    PauseByKey( VK_F12 );
    }
как сделать так чтоб интервал нажатия был равен 5 сек? слип не помогает

Добавлено через 47 минут
В общем не очень рабочий код. Наверное проще описать задачу.
Необходимо чтоб совершался клик мышкой каждые 5 сек, при чем запускаем програму, для старта начала кликов жмякаем ф12, для остановки кликов так же жмякаем ф12.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
17.09.2014, 14:43
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
inline bool IsKeyDown(int Key)
{
  return (GetKeyState(Key) & 0x8000) != 0; // ну тут понятно, true, если определенная кнопка нажата, false если нет
}
 
void PauseByKey(int Key)
{
    if( !IsKeyDown(Key) ) return; // если нужная кнопка не нажата, уходим из функции
    while( IsKeyDown(Key) ){}; // как только кнопку нажали, попадаем сюда и ждем, пока ее отпустят
    printf("Paused"); // кнопку отжали - и мы попали сюда, сообщаем о паузе
    while( !IsKeyDown(Key) ){}; // снова ждем пока не нажмут нашу кнопку
    while( IsKeyDown(Key) ){}; // и наконец ждем пока ее не отпустят
}
Нажатие кнопки - это два события - ее нажатие - и ее отжатие. Если не отслеживать отпускание кнопки... ну вобщем ниче не получится

>как сделать так чтоб интервал нажатия был равен 5 сек? слип не помогает

Совершенно не понял о чем вы спросили. Попробуйте расписать - как должна вести себя программа.

Добавлено через 17 минут
Да, понятно. Какая у вас ОС?
0
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211
18.09.2014, 13:28  [ТС]
ОС Win 7
Необходимо чтоб совершался клик мышкой каждые 5 сек, при чем запускаем програму, для старта начала кликов жмякаем ф12, для остановки кликов так же жмякаем ф12.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
18.09.2014, 13:32
А не проще ли создать дополнительный поток который будет контролировать выполнение первого потока(точнее наоборот)? SuspendThread и ResumeThread в помощь.
1
 Аватар для Kverter
37 / 37 / 25
Регистрация: 30.10.2013
Сообщений: 211
18.09.2014, 14:51  [ТС]
Ни разу не работал с потоками. Можете привести пример?

Добавлено через 1 час 8 минут
С паузой все ок, а вот как сделать старт цикла по нажатию этой же клавиши? То есть сейчас ситуация такая:
Запускается exe и программа сразу начинает работать, а нужно сделать так:
1)запускался exe
2) Нажималось кнопка ф12 и запускалась работа.
_getch() не подходит так как окно программы в этот момент не активное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2014, 14:51
Помогаю со студенческими работами здесь

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

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

Остановка выполнения функции по нажатию клавиши
Делаю проект на С++, WinForms, в 2005 VS. По нажатию кнопки запускается функция (из отдельного класса, вызывает и некоторые другие...

Остановка сервера DNS по нажатию клавиши
Задача заключается в следующем. Нужно остановить сервер DNS по нажатию клавиши. Сервер установлен на ubunte программа пишется в mono. Для...

Остановка потока. Выполнение действия по нажатию клавиши
Здравствуйте. У меня такой вопрос. Например у меня есть класс генерации чисел, и другой класс это main, и любое сгенерированное число, я...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
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 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru