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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 19:37     Завершение бесконечного цикла через определенное время #1
Есть бесконечный цикл for( ; ; ), который обрабатывает событие нажатия кнопки в игре.
Если на кнопку не нажали в течении двух секунд, нужно, чтобы цикл завершался, как это можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 19:37     Завершение бесконечного цикла через определенное время
Посмотрите здесь:

C++ Консоль. Завершение цикла нажатием клавиши
На какой отметке остановится мотоциклист через определенное время? C++
Условие завершение цикла с использованием структуры C++
Помогите решить задачу(Гражданин открыл счет в банке. Определить прирост и сумму вклада через определенное время) C++
Очистка экрана в консоли через определенное время C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ezembi
 Аватар для 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)  //проверка: была ли нажата любая клавиша
        {
        }   
    }
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
17.10.2013, 19:43     Завершение бесконечного цикла через определенное время #3
Запустить отдельный поток, в котором засечь время работы программы!
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
17.10.2013, 20:03  [ТС]     Завершение бесконечного цикла через определенное время #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Запустить отдельный поток, в котором засечь время работы программы!
Ээ, нее, я лучше воспользуюсь первым советом, он попроще

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

Цитата Сообщение от ValeryS Посмотреть сообщение
Для начала программа какая?
консольная?
тогда совет с kbhit()!=0 подойдет
оконная?
тогда забыть цикл как страшный сон и работать с таймером SetTimer\ KillTimer
и обрабатывать событие WM_TIMER
Оконная. Сейчас попробую, а почему цикл нужно забыть?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 12:04     Завершение бесконечного цикла через определенное время #17
Цитата Сообщение от dimakozyr Посмотреть сообщение
События есть внутри цикла,
Какие, если не двигать мышь и не нажимать на клавиши и кнопки мыши?
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 12:05  [ТС]     Завершение бесконечного цикла через определенное время #18
Цитата Сообщение от alsav22 Посмотреть сообщение
Какие, если не двигать мышь и не нажимать на клавиши и кнопки мыши?
На экране рандомом появляется бобер в разных местах.
Если на него не нажать за 2 секунды, то он исчезает и появляется в другом месте.
SatanaXIII
21.10.2013, 12:23
  #19

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 12:33     Завершение бесконечного цикла через определенное время
Еще ссылки по теме:

Как сделать обновление текста строки через определенное время? C++
C++ Изменить значение переменной через определенное время
Отладка бесконечного цикла C++

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

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

Добавлено через 24 секунды
Но от этого не легче..
Yandex
Объявления
21.10.2013, 12:33     Завершение бесконечного цикла через определенное время
Ответ Создать тему
Опции темы

Текущее время: 10:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru