我只是用C#开发游戏,我是新迁移C++的,我只想把游戏重写成C++,几乎成功地将所有代码从C#翻译成C++,但是有一些问题,我的游戏使用系统。 C# 中的 DateTime.Now.Ticks ......我被卡住了
所以.. C++ 中有与 System.DateTime.Now.Ticks 等价的东西吗?
我只是用C#开发游戏,我是新迁移C++的,我只想把游戏重写成C++,几乎成功地将所有代码从C#翻译成C++,但是有一些问题,我的游戏使用系统。 C# 中的 DateTime.Now.Ticks ......我被卡住了
所以.. C++ 中有与 System.DateTime.Now.Ticks 等价的东西吗?
函数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
。
使用QueryUnbiasedInterruptTime
. 就像DateTime.Ticks
,每个刻度QueryUnbiasedInterruptTime
也是 100 纳秒。如果您需要更高的分辨率,则需要选择QueryPerformanceCounter
.
链接: http: //msdn.microsoft.com/en-us/library/windows/desktop/ee662306 (v=vs.85).aspx
没有等效的类或方法,但您可以这样做:
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);