Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87

Прерывание бесконечного цикла нажатием горячей клавиши

07.01.2018, 18:18. Показов 3421. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такое дело: надо, чтобы при нажатии на кнопку начиналась функция и выполнялась до тех пор, пока не будет нажат эскейп.
Я пытаюсь реализовать это так, но ничего не получается: цикл оказывается бесконечным вне зависимости от нажатой эскейп.
Что я делаю не так?
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
28
29
30
31
32
33
34
35
36
37
int act = 1;
//~~~~~~~~~~~~~
int tree245(int ab)
{
        if(ab == 1)
        {
        SetCursorPos(193, 518);
        Sleep(tree091); 
        
 
        if(ab == 0)
         {
            tree245(0);
 
         }else{
             tree245(1);
         }
        }else{
            return 0;
        }
}
//~~~~~~~~~~~~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    tree245(act);
}
//~~~~~~~~~~~~
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
 
         if(GetKeyState(VK_ESCAPE))
         {
         
            tree245(0);
            act = 0;
         }
}
Добавлено через 17 минут
Хочу сказать, что я взял немного не всю функцию ,хотя это и не важно. По сути, мышка должна перемещаться еще на одну точку

Добавлено через 4 часа 3 минуты
Ребят, ну помогите...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2018, 18:18
Ответы с готовыми решениями:

Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main()
Вкратце, в функции main() есть некий объект класса - scene, также есть бесконечно работающий цикл while(1), в котором вызывается...

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

Опрос кода клавиши для остановки бесконечного цикла
Доброй ночи. Курсовая работа на тему создания справочника по резисторам. Пытаюсь писать по кускам. фрагмент программы: ...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,880
Записей в блоге: 12
07.01.2018, 18:25
Ничего, что у тебя рекурсия, из которой не так-то просто выйти? Переделай на итерацию (именно на цикл), и первое, что делай в цикле - это проверяй состояние переменной act. Если она = 0 - то выходи из функции.
1
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
07.01.2018, 19:36  [ТС]
volvo, я что-то, кажется, не понял. Сделал так, но ничего не изменилось
C++
1
2
3
4
5
while(ab == 1)
        {
        SetCursorPos(193, 518);
        Sleep(tree091);
        }
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,880
Записей в блоге: 12
07.01.2018, 20:24
Для начала хочется понять, что делает эта функция, чтобы переписать ее без рекурсии.
1
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
07.01.2018, 20:26  [ТС]
volvo, она перемещает курсор по экрану и жмет кнопку мыши
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
07.01.2018, 20:27
В цикл вставь вызов Application->ProcessMessages();
1
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
07.01.2018, 20:34  [ТС]
Fulcrum_013, а что это? я вписал в конец, но ничего не произошло
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
07.01.2018, 21:30
Лучший ответ Сообщение было отмечено Jodi Redlot как решение

Решение

Куда именно вписал?

Добавлено через 2 минуты
Цитата Сообщение от Jodi Redlot Посмотреть сообщение
а что это?
Это вызов функции которая обрабатывает сообщения винды. Т.е. система работы ГУИ в билдере такая - TApplication получает сообщение и запускает событие его обработки. Пока оно полностью не завершилось следующее сообщение не обрабатывается. Поэтому если хочешь чтобы программа среагировала на что либо во время обработки сообщения надо вызвать Application->ProcessMessages

Добавлено через 3 минуты
Jodi Redlot,
кстати еще один способ - клаву можно асинхронно опрашиваешь через GetAsyncKeyState(VK_ESCAPE) прямо в цикле. не вызывая ProcessMessages. Это будет полный фриз всего приложения пока Esc не нажмешь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2018, 21:30
Помогаю со студенческими работами здесь

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

Есть ли возможность реализовать прерывание цикла консольного приложения нажатием клавиши?
Выполняется цикл, при нажатии клавиши (например "А") цикл прерывается, но программа не закрывается. Приложение консольное

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

прерывание цикла нажатием кнопки
никак цикл не прерывается. почему-понять не могу function varargout = untitled(varargin) gui_Singleton = 1; gui_State =...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru