我使用此代码来跟踪上次重启:
+ (float) secondsSinceLastReboot{
return ((float)(mach_absolute_time())) * ((float)timebase.numer) / ((float)timebase.denom) / 1000000000.0f;
}
Run Code Online (Sandbox Code Playgroud)
我假设mach_absolute_time()基于上次设备启动时间,就像在mac上一样.它似乎不是基于此.我实际上不知道它的基础是什么.
请看以下行为(今天的日期是2009-09-20):
lastRebootTime = [[NSDate date] addTimeInterval:-[self secondsSinceLastReboot]];
//last Reboot Time will contain : 2009-09-20 07:42:14 +0100
Run Code Online (Sandbox Code Playgroud)
我绝对肯定我当时没有重启我的设备.我的设备一周内没有启动.
此外,当我从电缆上取下设备并运行此应用程序时,似乎当设备进入休眠状态时,lastRebootTime将来会开始转移.似乎mach_absolute_time没有考虑睡眠时间.或者我错了吗?
我真的希望能够从设备上次重启时获取时间戳.有任何想法吗?
有没有办法在Windows上用C++来测量以纳秒为单位的时间?
我能找到的只是linux解决方案.
我有一个程序从系统时钟读取当前时间并将其保存到文本文件.我之前使用过的GetSystemTime函数,但时间并不完全一致,例如:其中一次是32567.789,下一次是32567.780,这是时间倒退.
我正在使用这个程序将时间节省高达每秒10次.我读到GetSystemTimeAsFileTime函数更准确.我的问题是,如何将当前代码转换为使用GetSystemTimeAsFileTime函数?我试图使用FileTimeToSystemTime函数,但有同样的问题.
SYSTEMTIME st;
GetSystemTime(&st);
WORD sec = (st.wHour*3600) + (st.wMinute*60) + st.wSecond; //convert to seconds in a day
lStr.Format( _T("%d %d.%d\n"),GetFrames() ,sec, st.wMilliseconds);
std::wfstream myfile;
myfile.open("time.txt", std::ios::out | std::ios::in | std::ios::app );
if (myfile.is_open())
{
myfile.write((LPCTSTR)lStr, lStr.GetLength());
myfile.close();
}
else {lStr.Format( _T("open file failed: %d"), WSAGetLastError());
}
Run Code Online (Sandbox Code Playgroud)
编辑要添加更多信息,代码会从摄像机捕获图像,该图像每秒运行10次,并节省图像拍摄到文本文件的时间.当我从第二个中减去文本文件的第一个条目,依此类推,例如:条目2-1 3-2 4-3等我得到这个图,其中x轴是条目数,y轴是减去的值.
所有这些都应该在0.12左右,其中大部分都是.但是你可以看到它们中的很多都有所不同,有些甚至是负面的.这不是因为相机,因为相机有自己的内部时钟,没有变化.它与捕获系统时间有关.我想要的是以最高分辨率和尽可能少的噪声提取系统时间的最准确方法.
编辑2我已经接受了您的建议并再次运行程序.这是结果:
你可以看到它比以前好很多但它仍然不对.我觉得奇怪的是它似乎非常增量.我也只绘制了时间,这是结果,其中x是条目,y是时间:
有没有人知道什么可能导致每30帧左右出场的时间?