我正在学习 C 并实现一个变量在特定时间段内递增的函数。但是,我一直无法找到不依赖于操作系统(pthreads)或适用于 C++ 或 C# 的解决方案。此外,我无法找到一种不使用像 usleep(); 这样的函数的方法。因为我需要让它与程序的其余部分一起运行,而不是停止它。
这是我到目前为止编写的函数,但正如前面提到的,我还没有找到解决方案。 main函数中没有代码,我使用的是stdlib.h和raylib.h
int increment = 0;
void var_increment(){
// can't find a time based way
increment += 1;
}
Raylib 提供以下与时序相关的函数:
void SetTargetFPS(int fps); // Set target FPS (maximum)
float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time)
double GetTime(void); // Get elapsed time in seconds since InitWindow()
int GetFPS(void); // Get current FPS
特别是,
GetTime
或GetFrameTime
可用于导出基于时间的增量。
这是一个每秒递增计数器一次的示例(使用非常基本的增量计时)。此外,它还显示了
GetTime
(与 InitWindow
的偏移量)和累积帧增量之间的差异。
#include <raylib.h>
int main(void)
{
InitWindow(300, 80, "Timing Example");
SetTargetFPS(60);
float elapsed = 0;
float timer = 0;
unsigned counter = 0;
unsigned frame = 0;
while (!WindowShouldClose()) {
float dt = GetFrameTime();
elapsed += dt;
timer += dt;
if (timer >= 1.0f) {
timer -= 1.0f;
counter++;
}
frame++;
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText(TextFormat("%d FPS | FRAME %u", GetFPS(), frame), 10, 5, 20, GREEN);
DrawText(TextFormat("%.2fs", elapsed), 10, 40, 20, BLACK);
DrawText(TextFormat("%.2fs", timer), 100, 40, 20, BLACK);
DrawText(TextFormat("%u", counter), 190, 40, 20, BLACK);
DrawText(TextFormat("%.2fs", GetTime()), 10, 60, 20, BLACK);
DrawText("~ InitWindow()", 100, 60, 20, BLACK);
EndDrawing();
}
CloseWindow();
}