Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Kverter
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
1

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

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

Всем привет! Вопрос как реализовать запуск и остановку цикла в консольном приложении по нажатию клавиши f12?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2014, 14:33
Ответы с готовыми решениями:

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

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

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

Остановка цикла do while
При вводе любого числа кроме 1; 2; 3; цикл должен повторяться, иначе...

Остановка цикла do while
Доброго времени суток. Столкнулся с такой проблемой в решении задачи: Дана...

10
zss
Модератор
Эксперт С++
7480 / 6849 / 4324
Регистрация: 18.12.2011
Сообщений: 18,117
Завершенные тесты: 1
16.09.2014, 19:24 2
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
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
16.09.2014, 19:41  [ТС] 3
Так не покатит, мне получается постоянно во время цикла нужно жмякать ф12, а надо так чтоб нажал ф12 програма работает, еще раз нажал -остановилась. Подозреваю что нужно как то с хоткеем работать,но с этим ни разу не имел дело.
0
vantfiles
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
16.09.2014, 21:24 4
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
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
16.09.2014, 21:59  [ТС] 5
Почти, но еще нужно чтоб цикл и запускался по нажатию этой же клавиши
0
vantfiles
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
16.09.2014, 23:02 6
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
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
17.09.2014, 14:01  [ТС] 7
Если тебе не сложно, можешь прокоментить код? Хочется разобраться и понять, чтоб больше не возникало таких вопросов.

Добавлено через 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
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
17.09.2014, 14:43 8
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
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
18.09.2014, 13:28  [ТС] 9
ОС Win 7
Необходимо чтоб совершался клик мышкой каждые 5 сек, при чем запускаем програму, для старта начала кликов жмякаем ф12, для остановки кликов так же жмякаем ф12.
0
Ilot
Эксперт С++
1832 / 1190 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
18.09.2014, 13:32 10
А не проще ли создать дополнительный поток который будет контролировать выполнение первого потока(точнее наоборот)? SuspendThread и ResumeThread в помощь.
1
Kverter
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
18.09.2014, 14:51  [ТС] 11
Ни разу не работал с потоками. Можете привести пример?

Добавлено через 1 час 8 минут
С паузой все ок, а вот как сделать старт цикла по нажатию этой же клавиши? То есть сейчас ситуация такая:
Запускается exe и программа сразу начинает работать, а нужно сделать так:
1)запускался exe
2) Нажималось кнопка ф12 и запускалась работа.
_getch() не подходит так как окно программы в этот момент не активное
0
18.09.2014, 14:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 14:51

Почему происходит остановка цикла?
Подскажите почему при заполнении массива строками длиной от 5 символов,...

sdl остановка цикла отрисовки кадров
Сабж есть цикл отрисовки кадров: for(i = 0; i &lt; FRAMES; i++) { src.x =...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru