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

时间:2014-06-10 01:18:13

标签: c++ winapi systemtime

嘿大家我正在使用SYSTEMTIME结构用c ++执行arithematic来创建一个倒数计时器。我如何设置自定义时间并使其倒计时?这是一个非常通用的问题,但如果有任何具有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. 2。  另外,如何从这个时间开始倒计时?

    请注意,因为我使用GDI,所以我必须使用这种结构,因为我已经使用这个结构的代码使用了这个结构,我们已经实现了它,所以没有改变的余地,可以有谁给我解决方案来解决我的两个问题?

    !!!编辑!!!我试图在这里以倒计时格式再现这个计时器http://www.picksourcecode.com/ps/ct/161097.php,只需几小时和几分钟就可以使用opengl制作冒险游戏的炸弹计时器。我如何重新编程这段代码,以便我可以加入这个标准的倒计时数字时钟?

    非常感谢任何帮助,非常感谢!

2 个答案:

答案 0 :(得分: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 :(得分:0)

您可以将计时器用于此目的,我建议您使用GetTickCount功能。您可以获得PC运行的毫秒数并再次获取它并使用减法获得传递的时间。