win32 — Как использовать структуру SYSTEMTIME в качестве часов обратного отсчета

Привет всем, я использую структуру SYSTEMTIME для выполнения арифметических с C ++ для создания таймера обратного отсчета. Как бы я установить пользовательское время и сделать обратный отсчет? Это очень общий вопрос, но если кто-то, имеющий опыт работы со структурой SYSTEMTIME, сможет оказать мне некоторую помощь, которая будет очень признательна!

  1. Я хочу установить время по умолчанию для SYSTEMTIME, так как

    SYSTEMTIME tvar;
    GetLocalTime(&tvar); // instead of using this to initiate the clock i'd like to set the time by myself
    

2.
Кроме того, как я могу сделать этот отсчет времени с того времени?

Обратите внимание, что, поскольку я использую GDI, мне необходимо использовать эту структуру, и поскольку код, над которым я уже работал с моей группой, использует эту структуру, мы уже реализовали ее, поэтому нет места для изменений, может кто-нибудь дать мне решение, чтобы решить те две проблемы, которые у меня есть?

!!! РЕДАКТИРОВАТЬ !!! Я пытаюсь воссоздать этот таймер здесь http://www.picksourcecode.com/ps/ct/161097.php в формате обратного отсчета с часами и минутами для таймера бомбы для приключенческой игры, которую я делаю с opengl. Как бы я перепрограммировал этот код, чтобы включить цифровые часы обратного отсчета этого стандарта?

Любая помощь приветствуется, спасибо большое!

-1

Решение

Идея в корне неверна. Я бы порекомендовал использовать вместо этого FILETIME. Код должен выглядеть так:

typedef __int64 TDateTime;  // This is actually an alias to NT FILETIME.

inline TDateTime  CurrDateTime()
{
TDateTime param;
GetSystemTimeAsFileTime((FILETIME*)&param);
return(param);
}

#define   ONE_SECOND    ((__int64)10000000)

TDateTime myFinalTime = CurrDateTime() + 30*ONE_SECOND;
while (CurrDateTime() < myFinalTime )
Sleep(50);

На самом деле FILETIME — это 64-битное целое число. функция GetSystemTimeAsFileTime() дешево. Он отлично работает в коде, как указано выше. Я использовал это много раз.

Если вы хотите показать TDateTime значение на экране нужно позвонить FileTimeToLocalFileTime(...) а потом FileTimeToSystemTime(...) API-интерфейсы.

1

Другие решения

Вы можете использовать таймер для этой цели, и я предлагаю вам использовать GetTickCount функция. Вы можете получить миллисекунды, что ПК работает, и получить его снова и получить прошедшее время, используя вычитание.

0

По вопросам рекламы [email protected]