在 C(不是 C++)中在指定时间段后实现递增变量

问题描述 投票:0回答:1

我正在学习 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;
   

}
c macos time
1个回答
0
投票

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.