2

我只是用C#开发游戏,我是新迁移C++的,我只想把游戏重写成C++,几乎成功地将所有代码从C#翻译成C++,但是有一些问题,我的游戏使用系统。 C# 中的 DateTime.Now.Ticks ......我被卡住了

所以.. C++ 中有与 System.DateTime.Now.Ticks 等价的东西吗?

4

3 回答 3

2

在 cplusplus.com 上查看 教程以独立于平台。

函数Clock()返回此进程已消耗的抽动量。要访问此功能,您需要包括:#include <time.h>.

要获得同样的结果,只需几秒钟,您可以使用CLOCKS_PER_SEC宏,因此您可以:Clock() / CLOCKS_PER_SEC获取此过程所用的秒数。但请记住,您可能会以这种方式失去一些精确度。


不过,您可能不需要这个确切的功能......如果您正在寻找自程序启动以来经过的确切时间,您(据我所知)必须使用difftime()function. 如果您需要精确的抽动,您可能会失去一些精度,具体取决于您的平台。

这样,您必须在申请开始时保存当前时间,并在申请期间从当前时间中减去它。

#include <stdio.h>
#include <time.h>

time_t programstart;

int main ()
{
  time(&programstart); //assign the current time 

  /*... the program ...*/

  //get seconds since start
  double secondssincestart = difftime(time(NULL), programstart);

  printf ("the program took: %f seconds\n", secondssincestart);

  return 0;
}

编辑:

由于这篇文章仍然受到一些关注,重要的是要注意,今天的 C++11 具有标准、易于使用和非常方便的库chrono

于 2013-03-31T05:11:34.727 回答
0

使用QueryUnbiasedInterruptTime. 就像DateTime.Ticks,每个刻度QueryUnbiasedInterruptTime也是 100 纳秒。如果您需要更高的分辨率,则需要选择QueryPerformanceCounter.

链接: http: //msdn.microsoft.com/en-us/library/windows/desktop/ee662306 (v=vs.85).aspx

于 2013-03-31T05:07:22.283 回答
0

没有等效的类或方法,但您可以这样做:

SYSTEMTIME systemTime;
GetLocalTime(&systemTime);

FILETIME fileTime;
SystemTimeToFileTime(&systemTime, &fileTime);

ULARGE_INTEGER largeInteger;
largeInteger.LowPart = fileTime.dwLowDateTime;
largeInteger.HighPart = fileTime.dwHighDateTime;

ULONGLONG ticks = reinterpret_cast<ULONGLONG&>(largeInteger);
于 2013-03-31T05:09:00.690 回答