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

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

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

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

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

Есть бесконечный цикл for( ; ; ), который обрабатывает событие нажатия кнопки в игре.
Если на кнопку не нажали в течении двух секунд, нужно, чтобы цикл завершался, как это можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 19:37     Завершение бесконечного цикла через определенное время
Посмотрите здесь:
C++ Изменить значение переменной через определенное время
Очистка экрана в консоли через определенное время C++
На какой отметке остановится мотоциклист через определенное время? C++
Как сделать обновление текста строки через определенное время? C++
Помогите решить задачу(Гражданин открыл счет в банке. Определить прирост и сумму вклада через определенное время) C++
Досрочное завершение цикла for C++
Отладка бесконечного цикла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 20:27  [ТС]     Завершение бесконечного цикла через определенное время #31
Почему-то получается, что таймер мгновенно начинается и заканчивается,
какое-бы значение в миллисекундах не было указано

C++
1
2
3
4
5
6
7
8
SDL_NewTimerCallback C_SceneElements::callback() {
    timeToDisplayBeaverInSeconds /= 2;
    return 0;
}
 
void someFunction() {
    SDL_TimerID timer60Seconds = SDL_AddTimer(5000, callback(), NULL);
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 20:38     Завершение бесконечного цикла через определенное время #32
У вас это компилируется?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 20:39  [ТС]     Завершение бесконечного цикла через определенное время #33
Цитата Сообщение от alsav22 Посмотреть сообщение
У вас это компилируется?
Да. Я понимаю, что это неправильно, но уже перепробовал много вариантов
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 20:50     Завершение бесконечного цикла через определенное время #34
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да.
Странно...

Добавлено через 2 минуты
callback() должна возвращать интервал, а не SDL_NewTimerCallback, и принимать два параметра.

Добавлено через 1 минуту
У SDL_AddTimer() второй параметр не должен быть вызовом функции.

Добавлено через 4 минуты
Вот прототип callback:
C++
1
Uint32 my_callbackfunc(Uint32 interval, void *param);
Вот прототип SDL_AddTimer:
C++
1
SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void* param);
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 21:44  [ТС]     Завершение бесконечного цикла через определенное время #35
Я так уже тоже делал, сейчас таймер имеет вид:
C++
1
2
3
4
5
6
7
8
Uint32 C_SceneElements::callback(Uint32 interval, void *param) {
    timeToDisplayBeaverInSeconds /= 2;
    return interval;
}
 
void someFunction() {
    SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void* param);
}
Теперь SDL_AddTimer нужно как-то вызвать?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 22:00     Завершение бесконечного цикла через определенное время #36
Компилируется?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 22:02  [ТС]     Завершение бесконечного цикла через определенное время #37
Цитата Сообщение от alsav22 Посмотреть сообщение
Компилируется?
Да, но эффекта никакого
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 22:04     Завершение бесконечного цикла через определенное время #38
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да, но эффекта никакого
А код, из 31 поста, тоже компилировался?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 22:05  [ТС]     Завершение бесконечного цикла через определенное время #39
Цитата Сообщение от alsav22 Посмотреть сообщение
А код, из 31 поста, тоже компилировался?
Тоже
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 22:20     Завершение бесконечного цикла через определенное время #40
Проект выложите.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
21.10.2013, 22:28  [ТС]     Завершение бесконечного цикла через определенное время #41
Вот, таймер описал в файле C_SceneElements.cpp
в методах callback и scene_2_events
Вложения
Тип файла: 7z Beaver.7z (4.59 Мб, 2 просмотров)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 23:20     Завершение бесконечного цикла через определенное время #42
Цитата Сообщение от dimakozyr Посмотреть сообщение
scene_2_events
Т.е., вот это есть создание таймера?
C++
1
SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void* param);
Добавлено через 15 минут
C++
1
 SDL_TimerID timer_id = SDL_AddTimer(2000, callback, this);
Уберите callback из методов класса.
C++
1
2
3
4
5
6
7
Uint32 callback(Uint32 interval, void *param) 
{
    SDL_WM_SetCaption("60 sec", NULL);
    C_SceneElements* p = (C_SceneElements*)param;
    p ->gettimeToDisplayBeaverInSeconds() /= 2;
    return interval;
}
Добавьте в C_SceneElements:
C++
1
2
int& gettimeToDisplayBeaverInSeconds()
      { return timeToDisplayBeaverInSeconds; }
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
22.10.2013, 11:24  [ТС]     Завершение бесконечного цикла через определенное время #43
Цитата Сообщение от alsav22 Посмотреть сообщение
Уберите callback из методов класса.
Цитата Сообщение от alsav22 Посмотреть сообщение
Добавьте в C_SceneElements:
Сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
// C_SceneElements.h
int& gettimeToDisplayBeaverInSeconds()
        { return timeToDisplayBeaverInSeconds; }
 
// C_SceneElements.cpp
Uint32 callback(Uint32 interval, void *param) {
    SDL_WM_SetCaption("60 sec", NULL);
    C_SceneElements* p = (C_SceneElements*)param;
    p -> gettimeToDisplayBeaverInSeconds() /= 2;
    return interval;
}
Но не пойму, как теперь запустить таймер и где выставляется время 60 секунд?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2013, 11:31     Завершение бесконечного цикла через определенное время #44
Цитата Сообщение от dimakozyr Посмотреть сообщение
Но не пойму, как теперь запустить таймер и где выставляется время 60 секунд?
Запускается сам, при создании, там же (первым параметром) - интервал работы).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2013, 11:41     Завершение бесконечного цикла через определенное время
Еще ссылки по теме:
Условие завершение цикла с использованием структуры C++
C++ Завершение цикла при вводе EOF
C++ Консоль. Завершение цикла нажатием клавиши
Многопоточность, выход из бесконечного цикла c++11 C++
не работает проверка бесконечного цикла C++

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

Или воспользуйтесь поиском по форуму:
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
22.10.2013, 11:41  [ТС]     Завершение бесконечного цикла через определенное время #45
Цитата Сообщение от alsav22 Посмотреть сообщение
Запускается сам, при создании, там же (первым параметром) - интервал работы)
Если он запускается сам, то как тогда передать функции callback параметр 60сек?

Добавлено через 6 минут
И нужно, чтобы таймер запускался не сразу при старте программы,
а при переходе на вторую игровую сцену с бобрами
Yandex
Объявления
22.10.2013, 11:41     Завершение бесконечного цикла через определенное время
Ответ Создать тему
Опции темы

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