Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сделать таймер на С++?

Автор вопроса: psychonautОтветов: 4

Я разрабатываю простую игру на С++, в стиле погони за точкой, где вы должны щелкнуть нарисованный круг на дисплее, а затем с каждым щелчком он переходит в другое случайное место, но я хочу, чтобы игра закончилась после 60 секунд или около того, запишите счет в текстовый файл, а затем при запуске программы прочитайте из текстового файла и сохраните информацию в массиве и каким-то образом перестройте ее, чтобы создать таблицу рекордов. Я думаю, что могу сам определить высокий балл и щелкнуть мышью в определенной области, но я полностью застрял в создании возможного таймера. Любая помощь приветствуется, ура!

  • Я полагаю, что это был бы тот тип вопроса, с которым можно было бы упомянуть платформу. Часы - это аппаратная функция, и доступ к ней зависит от платформы и библиотеки. Например. линукс, вин32? СДЛ, консоль? и т.д sehe 25.04.2011

c++timer

Ответы

Ответ 1 · рейтинг 19 · Howard Hinnant

В С++ 11 есть простой доступ к таймерам. Например:

#include <chrono>
#include <iostream>

int main()
{
    std::cout << "begin\n";
    std::chrono::steady_clock::time_point tend = std::chrono::steady_clock::now()
                                               + std::chrono::minutes(1);
    while (std::chrono::steady_clock::now() < tend)
    {
        // do your game
    }
    std::cout << "end\n";
}

Ваша платформа может поддерживать или не поддерживать <chrono>. Существует boost реализация <chrono>.

Ответ 2 · рейтинг 1 · sehe

Без привязки к конкретному фреймворку или даже к ОС на это нельзя ответить.

В SDL есть SDL_GetTicks(), который подходит для этой цели.

В Linux есть clock_gettime или gettimeofday общего назначения, которые должны работать почти везде (но будьте осторожны с деталями).

Win32 API имеет несколько вызовов функций, связанных с этим, включая механизмы обратного вызова таймера, такие как GetTickCount, Timers и т. д. (статья)

Использование таймеров обычно тесно связано с мемом "бездействующей" обработки. Таким образом, вы также захотите найти эту тему (и именно здесь вступает в действие насос сообщений, потому что насос сообщений решает, когда (например) WM_IDLE сообщения будут отправлены; Gtk имеет аналогичную концепцию Idle hooks, и я считаю, каждая структура пользовательского интерфейса делает)

Ответ 3 · c-smile

Обычно программа с графическим интерфейсом имеет так называемый цикл "перекачки сообщений". Проверка этого таймера должна быть частью вашего цикла:

while(running)
{
  if( current_time() > end_time )
  {
    // time is over ...
    break;
  }
  if( next_ui_message(msg) )
    dispatch(msg);
}

Ответ 4 · user2808359

Попробуйте это:

//Creating Digital Watch in C++
#include<iostream>
#include<Windows.h>
using namespace std;

struct time{

int hr,min,sec;
};
int main()
{
time a;
a.hr = 0;
a.min = 0;
a.sec = 0;

for(int i = 0; i<24; i++)
{
    if(a.hr == 23)
    {
        a.hr = 0;
    }

    for(int j = 0; j<60; j++)
    {
        if(a.min == 59)
        {
            a.min = 0;
        }

        for(int k = 0; k<60; k++)
        {
            if(a.sec == 59)
            {
                a.sec = 0;
            }

            cout<<a.hr<<" : "<<a.min<<" : "<<a.sec<<endl;
            a.sec++;
            Sleep(1000);
            system("Cls");
        }
    a.min++;

}

    a.hr++;
}

}
  • Подробности смотрите по адресу: http://www.programmingtunes.com/creating-timer-c/#sthash.j9WLtng2.dpuf

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы