win32 -如何使用SYSTEMTIME结构作为倒计时时钟

win32 - How to use SYSTEMTIME structure as a countdown clock

本文关键字:倒计时 时钟 结构 SYSTEMTIME 何使用 win32      更新时间:2023-10-16

大家好,我正在使用结构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制作冒险游戏的炸弹计时器。我该如何重新编程这段代码,使我可以纳入这个标准的倒计时数字时钟?

任何帮助都是感激的,非常感谢!

这个想法根本就是错误的。我建议使用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。

您可以为此目的使用定时器,我建议您使用GetTickCount函数。你可以得到PC正在运行的毫秒数,然后再得到它,然后用减法得到经过的时间。