Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560

Завершение бесконечного цикла через определенное время

17.10.2013, 19:37. Показов 7012. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть бесконечный цикл for( ; ; ), который обрабатывает событие нажатия кнопки в игре.
Если на кнопку не нажали в течении двух секунд, нужно, чтобы цикл завершался, как это можно сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2013, 19:37
Ответы с готовыми решениями:

Завершение Messagebox через определенное время
Подскакжите, пожалуйста, как можно реализовать таую вещь - например, находится файл в директории, каждую минуту папка сканируется, при...

Завершение бесконечного цикла по нажатию CTRL + D
Имеется программа, которая должна брать вводимые числа из массива и выводить всё описанное. Работает для i = 5 но по задаче количество...

Завершение сеансов всех пользователей и их программ в определенное время
Добрый день, коллеги, такой вопрос - если можно Как в windows server 2012R2 создать задание по закрытию всех пользователей и их программ...

62
 Аватар для Ezembi
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 19:42
Как раз для тетриса писал нечто подобное
C++
1
2
3
4
5
6
7
clock_t start = clock();
    while(((double) (clock() - start) / CLOCKS_PER_SEC)<2)  //собственно 2 сек
    {
        if(kbhit()!=0)  //проверка: была ли нажата любая клавиша
        {
        }   
    }
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
17.10.2013, 19:43
Запустить отдельный поток, в котором засечь время работы программы!
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
17.10.2013, 20:03  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Запустить отдельный поток, в котором засечь время работы программы!
Ээ, нее, я лучше воспользуюсь первым советом, он попроще

Добавлено через 8 минут
Странно, заметил такую вещь, что данный способ работает, если перемещать курсор.
Если его оставить на месте, то ничего не происходит
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
17.10.2013, 20:14
Цитата Сообщение от dimakozyr Посмотреть сообщение
я лучше воспользуюсь первым советом, он попроще
Поставьте в while значение побольше.
C++
1
while(((double) (clock() - start) / CLOCKS_PER_SEC)<1000)
А теперь попробуйте понажимать какие-нибудь кнопки/произвести какие-нибудь действия с программой.
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
17.10.2013, 20:19  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Поставьте в while значение побольше.
Код C++
1
while(((double) (clock() - start) / CLOCKS_PER_SEC)<1000)
А теперь попробуйте понажимать какие-нибудь кнопки/произвести какие-нибудь действия с программой.
Попробовал. А что должно произойти? Вроде все так-же работает, только время не 2 секунды
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
17.10.2013, 20:28
Цитата Сообщение от dimakozyr Посмотреть сообщение
А что должно произойти?
Не сможете, за время пока работает цикл, больше ничего сделать.
1
 Аватар для Ezembi
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:30
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не сможете, за время пока работает цикл, больше ничего сделать.
Так для этого и есть
C++
1
2
3
if(kbhit()!=0)  //проверка: была ли нажата любая клавиша
        {
        }
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
17.10.2013, 20:38  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не сможете, за время пока работает цикл, больше ничего сделать.
Цитата Сообщение от Ezembi Посмотреть сообщение
Так для этого и есть
Код C++
1
2
3
if(kbhit()!=0) *//проверка: была ли нажата любая клавиша
* * * * {
* * * * }
А, да, у меня внутри цикла обработка событий.
Но вот не пойму, почему отсчет времени останавливается, если курсором не шевелить
0
 Аватар для Ezembi
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:40
Цитата Сообщение от dimakozyr Посмотреть сообщение
отсчет времени останавливается, если курсором не шевелить
У меня норм
1
 Аватар для Ezembi
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:45
C++
1
2
3
4
5
6
7
8
9
10
11
while(1)
{
    clock_t start = clock();
    while(((double) (clock() - start) / CLOCKS_PER_SEC)<0.5)
    {
        if(kbhit()!=0)
        {
        }
 
    }
}
Миниатюры
Завершение бесконечного цикла через определенное время  
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
17.10.2013, 20:47  [ТС]
Цитата Сообщение от Ezembi Посмотреть сообщение
У меня норм
Может, это потому что SDL использую.. ладно, буду разбираться
0
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
21.10.2013, 11:32  [ТС]
Цитата Сообщение от Ezembi Посмотреть сообщение
while(((double) (clock() - start) / CLOCKS_PER_SEC)<2)* //собственно 2 сек
* * {
* * * * if(kbhit()!=0)* //проверка: была ли нажата любая клавиша
* * * * {
* * * * } *
* * }
В игре происходит ожидание нажатия на кнопку 2 секунды, потом игра продолжается.
Как можно сделать, чтобы каждую минуту время ожидания уменьшалось в 2 раза?

Пробовал так:
C++
1
2
3
4
5
6
7
while(((double) (clock() - start) / CLOCKS_PER_SEC)<60)*{ // 60 сек
    while(((double) (clock() - start) / CLOCKS_PER_SEC)< time)* // time по умолчанию = 2 сек
* *     {
* * * *     // проверка нажатия кнопки
    * * }
    time /= 2;
}
но в таком случае вообще все на минуту замирает
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 11:38
Цитата Сообщение от dimakozyr Посмотреть сообщение
А, да, у меня внутри цикла обработка событий.
Но вот не пойму, почему отсчет времени останавливается, если курсором не шевелить
Наверное, потому что событий нет...
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
21.10.2013, 11:43
Для начала программа какая?
консольная?
тогда совет с kbhit()!=0 подойдет
оконная?
тогда забыть цикл как страшный сон и работать с таймером SetTimer\ KillTimer
и обрабатывать событие WM_TIMER
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
21.10.2013, 12:02  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
А, да, у меня внутри цикла обработка событий.
Но вот не пойму, почему отсчет времени останавливается, если курсором не шевелить
События есть внутри цикла, с этим уже разобрался, вопрос-же не об этом

Цитата Сообщение от ValeryS Посмотреть сообщение
Для начала программа какая?
консольная?
тогда совет с kbhit()!=0 подойдет
оконная?
тогда забыть цикл как страшный сон и работать с таймером SetTimer\ KillTimer
и обрабатывать событие WM_TIMER
Оконная. Сейчас попробую, а почему цикл нужно забыть?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 12:04
Цитата Сообщение от dimakozyr Посмотреть сообщение
События есть внутри цикла,
Какие, если не двигать мышь и не нажимать на клавиши и кнопки мыши?
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
21.10.2013, 12:05  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Какие, если не двигать мышь и не нажимать на клавиши и кнопки мыши?
На экране рандомом появляется бобер в разных местах.
Если на него не нажать за 2 секунды, то он исчезает и появляется в другом месте.
0
21.10.2013, 12:23

Не по теме:

dimakozyr, это получается событие "бобер" передается операционной системе, которая знает что с ним делать? Операционная система сидит такая и думает: "пошевелилась мышка. Ага, надо значит перерисовать курсор. Так. Нажалась кнопка мышки. Значит проверю ка я что находится под ней и перешлю этому приложению это событие. Так-с, появился бобер. Надо случайно отрисовать его где-нибудь..."

0
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
21.10.2013, 12:33  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
dimakozyr, это получается событие "бобер" передается операционной системе, которая знает что с ним делать? Операционная система сидит такая и думает: "пошевелилась мышка. Ага, надо значит перерисовать курсор. Так. Нажалась кнопка мышки. Значит проверю ка я что находится под ней и перешлю этому приложению это событие. Так-с, появился бобер. Надо случайно отрисовать его где-нибудь..."
Да, все так и есть

Добавлено через 24 секунды
Но от этого не легче..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2013, 12:33
Помогаю со студенческими работами здесь

Нет ответа на команды во время выполнения бесконечного цикла
Здравствуйте. Такая проблема. Есть код мини игры, если её можно так назвать, в которой после &quot;покупки&quot; некой вещи к значению...

Как можно прервать выполнение цикла на определенное время?
&lt;? $y=0; for ($i=0; $i&lt;100; $i++){ $y++; if ($y==4){ # здесь нужно прервать цикл, скажем на 1 минуту... $y=0; } } ...

Как проходить через цикл через определенное время
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Самозапуск через определенное время?
Прошу помочь мне заставить программу самозапускаться ч/з определенное время. Заранее благодарен, Serj. Мой адрес: leyftd@mail.ru

Загрузка через определённое время
Многие видели на сайтах есть загрузка файла через опеределённое времмя .. у кого есть исходник ? глянуть хочу . или дайте ссылку почитать .


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

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