С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 19

Как выполнять функцию через определенное количество времени?

13.11.2016, 11:30. Показов 2929. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу консольный тетрис без графических библиотек. Нужно что бы через определенное количество времени опускался блок
Как это сделать? Может есть таймер в каких нибудь библиотеках? Или еще какой способ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2016, 11:30
Ответы с готовыми решениями:

Как написать программе выполнять определённое действие (функцию) перед закрытием?
В общем, как я раньше и говорил, я работаю над программой. Очень быстрой. Слегка подкорректировав код программы я сумел увеличить...

Как выполнять метод определённое количество времени?
Например, есть какой-то метод Step() Нужно чтобы он выполнялся 5 секунд, и чтобы счёт времени выполнялся не в самом методе Step().

Как сделать чтобы пост запросы отправлялись через определенное количество времени
Как сделать чтобы пост запросы отправлялись через определенное количество времени (к примеру 10 секунд) и каждый отправленный пост запрос...

9
 Аватар для Ghost Writter
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
13.11.2016, 11:36
ApeLbCuH, потоки или таймер, оба варианта требуют работы с winapi, ну или другим фреймворком.
1
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 19
13.11.2016, 11:44  [ТС]
Спасибо за ответ, а можете подробнее рассказать о потоках и таймерах. Какие функции и что нужно подключать?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
13.11.2016, 11:55
Цитата Сообщение от Ghost Writter Посмотреть сообщение
потоки или таймер
Цитата Сообщение от Ghost Writter Посмотреть сообщение
требуют работы с winapi, ну или другим фреймворком.
std::chrono.
std::thread.
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.11.2016, 12:11
Поток - это слишком жестоко.

Запустил первую фигурку. Выяснил текущее время. Рассчитал время, когда должна падать следующая фигурка. Далее идёт цикл обработки событий:
- Если нажали клавишу - отработал её
- Если наступило расчётное время следующей фигурки - выпустил её
- Если ничего не нажали - продвинул фигурку вниз на одну позицию
По окончании заснул на 1 секунду (ну или сколько там положено в соответствии с текущей скоростью). И повторяем цикл по новой

Ну или что-то в этом духе. Не нужны никакие потоки или таймеры. Нужно только уметь вычислять текущее время
1
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 19
13.11.2016, 12:41  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Рассчитал время, когда должна падать следующая фигурка.
Цитата Сообщение от Evg Посмотреть сообщение
- Если наступило расчётное время следующей фигурки - выпустил её
Следующая фигурка не должна падать через определенное количество времени, она должна падать тогда когда первая фигурка коснулась земли.

Цитата Сообщение от Evg Посмотреть сообщение
- Если нажали клавишу - отработал её
- Если наступило расчётное время следующей фигурки - выпустил её
- Если ничего не нажали - продвинул фигурку вниз на одну позицию
Если так сделать то тетрис будет очень пошаговым то есть за один ход влево или вправо блок будет опускаться на одну клетку в низ. А в тетрисе можно подвинуть блок на пару клеток влево или вправо за один блок вниз. Что бы этого не случилось нужно чтобы ходы влево или вправо были не зависимы от падения блока на одну клетку вниз, нужно что бы блок опускался не клетку вниз паралельно игровому циклу а для этого нужен таймер.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.11.2016, 13:46
Лучший ответ Сообщение было отмечено ApeLbCuH как решение

Решение

Не играет никакой роли. Выполняй всё в цикле и не будет никаких проблем. У тебя есть расчётное время того, когда фигурка должна продвинуться на одну единицу вниз. Пока это время не наступило - делай что хочешь. Можешь десять раз обработать клавишу "влево". Просто время сна между итерациями цикла сократи, например, до 0.05 секунд. Это будет означать, что за 1 секунду нельзя будет более 20 раз нажать кнопку, что вполне допустимое ограничение. Между циклами можно вообще не спать, а постоянно опрашивать клавиатуру и ждать, пока не наступит время продвинуть фигурку. Но такой вариант будет на 100% грузить одно процессорное ядро, что для тетриса несколько жирно

Первые тетрисы работали на машинах, у которых частота процессора измерялась ещё килогерцами, и на которых многозадачными операционными системами даже не пахло. И работало он всё без потоков, таймеров и прочих извращений
1
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 19
13.11.2016, 15:44  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Не играет никакой роли. Выполняй всё в цикле и не будет никаких проблем. У тебя есть расчётное время того, когда фигурка должна продвинуться на одну единицу вниз. Пока это время не наступило - делай что хочешь. Можешь десять раз обработать клавишу "влево". Просто время сна между итерациями цикла сократи, например, до 0.05 секунд. Это будет означать, что за 1 секунду нельзя будет более 20 раз нажать кнопку, что вполне допустимое ограничение. Между циклами можно вообще не спать, а постоянно опрашивать клавиатуру и ждать, пока не наступит время продвинуть фигурку. Но такой вариант будет на 100% грузить одно процессорное ядро, что для тетриса несколько жирно
Первые тетрисы работали на машинах, у которых частота процессора измерялась ещё килогерцами, и на которых многозадачными операционными системами даже не пахло. И работало он всё без потоков, таймеров и прочих извращений
Большое спасибо, разобрался.

Цитата Сообщение от Evg Посмотреть сообщение
Выяснил текущее время.
А как взять текущее время?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
13.11.2016, 16:08
Цитата Сообщение от ApeLbCuH Посмотреть сообщение
А как взять текущее время?
C++
1
2
3
#include <chrono>
...
auto clock = std::chrono::system_clock::now();
Или
C++
1
2
3
#include <ctime>
...
unsigned clock = std::clock();
1
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 19
13.11.2016, 17:16  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2016, 17:16
Помогаю со студенческими работами здесь

Копирование с ограничением по файлам через определенное количество времени
Доброе утро. Нужна ваша помощь. Задание. Дано: 1. Папка, где лежат файлы в формате xml (*.xml). Допустим C:\Archive 2. Папка...

Как выполнять JavaScript через интервал времени
Доброго времени суток друзья. Есть код: &lt;script type=&quot;text/javascript&quot;&gt; $(document).ready(function () { var n =...

Выполнять действие через интервал времени
Как зделать так что бы действие виполнялось через определенный интервал времени в Консольном приложении? Тоисть проверялось каждые например...

Выполнять функцию, при изменение размеров экрана. Или постоянно выполнять функцию
Доброго временисуток, есть функция, которую надо выполнять при при изменение размеров экрана или постоянно выполнять эту функцию. ...

Работа с Excel: как добавить в программу функцию автосохранения через определенное время
Помогите разобраться, как добавить в программу функцию автосохранения через определенное время, после того как было произведено...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru