Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
#1

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

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

Есть бесконечный цикл for( ; ; ), который обрабатывает событие нажатия кнопки в игре.
Если на кнопку не нажали в течении двух секунд, нужно, чтобы цикл завершался, как это можно сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 19:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Завершение бесконечного цикла через определенное время (C++):

Очистка экрана в консоли через определенное время - C++
Результат стоит в консоли секунду потом происходит очистка экрана. как такое можно реализовать??

Изменить значение переменной через определенное время - C++
Всем доброго времени суток. Допустим есть значение a=10; Надо его изменить на a=15 и что бы оно так держалось допустим в течени часа,...

На какой отметке остановится мотоциклист через определенное время? - C++
Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью...

Как сделать обновление текста строки через определенное время? - C++
Здравствуйте. Как сделать обновление текста строки через определенное время? #include <iostream> #include <string> #include...

Открыть и закрыть файл exe через определенное время - C++
Извините за тупой вопрос. Мне нужно просто открыть экзешник и со временем,например 5 секунд,чтобы сам просто закрылся. То есть просто...

Помогите решить задачу(Гражданин открыл счет в банке. Определить прирост и сумму вклада через определенное время) - C++
Помогите решить задачи через цикл do _ while: 2) Гражданин 1 марта открыл счет в банке вложив 1000 руб. Через каждый месяц размер...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 19:42 #2
Как раз для тетриса писал нечто подобное
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
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
17.10.2013, 19:43 #3
Запустить отдельный поток, в котором засечь время работы программы!
1
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 20:03  [ТС] #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Запустить отдельный поток, в котором засечь время работы программы!
Ээ, нее, я лучше воспользуюсь первым советом, он попроще

Добавлено через 8 минут
Странно, заметил такую вещь, что данный способ работает, если перемещать курсор.
Если его оставить на месте, то ничего не происходит
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
17.10.2013, 20:14 #5
Цитата Сообщение от dimakozyr Посмотреть сообщение
я лучше воспользуюсь первым советом, он попроще
Поставьте в while значение побольше.
C++
1
while(((double) (clock() - start) / CLOCKS_PER_SEC)<1000)
А теперь попробуйте понажимать какие-нибудь кнопки/произвести какие-нибудь действия с программой.
1
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 20:19  [ТС] #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Поставьте в while значение побольше.
Код C++
1
while(((double) (clock() - start) / CLOCKS_PER_SEC)<1000)
А теперь попробуйте понажимать какие-нибудь кнопки/произвести какие-нибудь действия с программой.
Попробовал. А что должно произойти? Вроде все так-же работает, только время не 2 секунды
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
17.10.2013, 20:28 #7
Цитата Сообщение от dimakozyr Посмотреть сообщение
А что должно произойти?
Не сможете, за время пока работает цикл, больше ничего сделать.
1
Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:30 #8
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не сможете, за время пока работает цикл, больше ничего сделать.
Так для этого и есть
C++
1
2
3
if(kbhit()!=0)  //проверка: была ли нажата любая клавиша
        {
        }
1
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 20:38  [ТС] #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не сможете, за время пока работает цикл, больше ничего сделать.
Цитата Сообщение от Ezembi Посмотреть сообщение
Так для этого и есть
Код C++
1
2
3
if(kbhit()!=0) *//проверка: была ли нажата любая клавиша
* * * * {
* * * * }
А, да, у меня внутри цикла обработка событий.
Но вот не пойму, почему отсчет времени останавливается, если курсором не шевелить
0
Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:40 #10
Цитата Сообщение от dimakozyr Посмотреть сообщение
отсчет времени останавливается, если курсором не шевелить
У меня норм
1
Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
17.10.2013, 20:45 #11
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
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 20:47  [ТС] #12
Цитата Сообщение от Ezembi Посмотреть сообщение
У меня норм
Может, это потому что SDL использую.. ладно, буду разбираться
0
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 11:32  [ТС] #13
Цитата Сообщение от 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
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 11:38 #14
Цитата Сообщение от dimakozyr Посмотреть сообщение
А, да, у меня внутри цикла обработка событий.
Но вот не пойму, почему отсчет времени останавливается, если курсором не шевелить
Наверное, потому что событий нет...
1
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
21.10.2013, 11:43 #15
Для начала программа какая?
консольная?
тогда совет с kbhit()!=0 подойдет
оконная?
тогда забыть цикл как страшный сон и работать с таймером SetTimer\ KillTimer
и обрабатывать событие WM_TIMER
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 11:43
Привет! Вот еще темы с ответами:

Досрочное завершение цикла for - C++
for (int i = 0; i &lt; n; i++) { cin &gt;&gt; names &gt;&gt; scores; } // прекратить ввод введение строки No More если даже i не достиг...

Отладка бесконечного цикла - C++
Здравствуйте. Проблема такая, написал цикл программы взаимодействия пользователя с меню Цикл не имеет условия выхода, что бы выйти...

Условие завершение цикла с использованием структуры - C++
Доброе время суток! Я новичок на этом форуме и если че не так не ругайтесь. У меня такой вопрос как задать условие выхода из цикла....

Завершение цикла при вводе EOF - C++
Пишу небольшую программку и в ней имеется вот такой код: typedef std::istream_iterator&lt;std::string&gt; string_input; for...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.10.2013, 11:43
Ответ Создать тему
Опции темы

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