LARGE_INTEGER
时间: 2023-06-21 08:19:30 浏览: 54
`LARGE_INTEGER` 是 Windows API 中定义的一个结构体,用于表示一个 64 位的有符号整数。它的定义如下:
```
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
} DUMMYSTRUCTNAME;
struct {
DWORD LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
```
其中,`DUMMYSTRUCTNAME` 和 `u` 都是匿名结构体,用于分别按照低位和高位或者高位和低位的顺序存储 32 位整数。`QuadPart` 则是一个 64 位整数,用于对整个 64 位有符号整数进行操作。
`LARGE_INTEGER` 可以用于表示文件大小、时间戳等数据,它也是一些 Windows API 函数中的参数类型,例如 `SetFilePointerEx`、`GetFileSizeEx` 和 `QueryPerformanceCounter` 等。
相关问题
sub_402360 proc near lpSystemTimeAsFileTime= dword ptr -3Ch SystemTimeAsFileTime= _FILETIME ptr -2Ch PerformanceCount= LARGE_INTEGER ptr -24h的含义
这是一段 x86 32位汇编代码,是一个名为 sub_402360 的过程。该过程包含以下变量:
- `lpSystemTimeAsFileTime`:一个指向 DWORD 类型的变量的指针,其值为 -3Ch。该变量用于存储系统时间(以文件时间格式表示)。
- `SystemTimeAsFileTime`:一个指向 _FILETIME 结构体类型的变量的指针,其值为 -2Ch。该变量存储系统时间。
- `PerformanceCount`:一个指向 LARGE_INTEGER 结构体类型的变量的指针,其值为 -24h。该变量用于存储 CPU 计数器的值。
该过程的功能和具体实现需要根据上下文分析,无法简单通过变量的定义来判断。
LARGE_INTEGER startCount, endCount, F; QueryPerformanceFrequency(&F);//精准帧率控制 while (1) { QueryPerformanceCounter(&startCount);//精准帧率控制开始计时 GameSceneDraw(gamescene);//绘制游戏场景 GameSceneControl(gamescene);//控制游戏场景 GameSceneUpdate(gamescene);//更新游戏场景 QueryPerformanceCounter(&endCount);//精准帧率控制结束计时 long long elapse = (endCount.QuadPart - startCount.QuadPart) * 1000000 / F.QuadPart; while (elapse < 10000) {//控制时差(单位:微秒) Sleep(1);//休眠1毫秒(开启可减小CPU占用率) //当前游戏帧率:100帧/秒 QueryPerformanceCounter(&endCount); elapse = (endCount.QuadPart - startCount.QuadPart) * 1000000 / F.QuadPart; } }每一句什么意思
这段代码是一个游戏主循环,其中包含了精准帧率控制的实现。
1. `LARGE_INTEGER startCount, endCount, F;` 定义了三个变量,用来存储计时器的开始时间、结束时间以及计时器的频率。
2. `QueryPerformanceFrequency(&F);` 用来获取当前计时器的频率,即每秒钟计时器会跳动多少次。
3. `while (1) { ... }` 是一个死循环,表示游戏主循环会一直执行。
4. `QueryPerformanceCounter(&startCount);` 获取当前时间作为帧开始的时间。
5. `GameSceneDraw(gamescene);` 绘制游戏场景。
6. `GameSceneControl(gamescene);` 控制游戏场景。
7. `GameSceneUpdate(gamescene);` 更新游戏场景。
8. `QueryPerformanceCounter(&endCount);` 获取当前时间作为帧结束的时间。
9. `long long elapse = (endCount.QuadPart - startCount.QuadPart) * 1000000 / F.QuadPart;` 计算当前帧的执行时间,单位为微秒。
10. `while (elapse < 10000) { ... }` 通过循环等待的方式控制帧率,保证每秒钟执行的帧数不会超过 100 帧。因为当前计时器的频率为每秒执行了 F 次,所以执行一帧所需的时间至少为 1/F 秒,即 1000000/F 微秒。
11. `Sleep(1);` 等待 1 毫秒,减小 CPU 占用率。
12. `QueryPerformanceCounter(&endCount);` 获取当前时间作为下一帧的开始时间。
13. `elapse = (endCount.QuadPart - startCount.QuadPart) * 1000000 / F.QuadPart;` 重新计算当前帧的执行时间。
总之,这段代码的作用是控制游戏的帧率,保证游戏每秒钟执行的帧数不会超过 100 帧。同时,它还可以减小 CPU 占用率,提高游戏的性能。