You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现定时递增变量:求跨平台非阻塞解决方案

基于Raylib实现非阻塞定时变量递增(C语言)

既然你已经在用Raylib,完全可以利用它自带的时间API来实现非阻塞的定时递增,不需要依赖操作系统线程或阻塞函数,而且能和程序其他逻辑并行运行。

核心思路是用绝对时间戳做非阻塞检查:在Raylib的主循环中,每次轮询时对比当前时间和上次递增的时间,当差值达到指定间隔时执行递增操作,全程不会阻塞主程序。

以下是完整实现代码:

#include <stdlib.h>
#include <raylib.h>

int increment = 0;
double last_increment_time = 0.0;
// 自定义递增间隔(单位:秒),比如设为0.5就是半秒一次
const float INCREMENT_INTERVAL = 1.0;

void var_increment() {
    double current_time = GetTime();
    // 检查是否达到设定的时间间隔
    if (current_time - last_increment_time >= INCREMENT_INTERVAL) {
        increment += 1;
        last_increment_time = current_time; // 更新上次递增的时间戳
    }
}

int main() {
    InitWindow(800, 450, "定时递增演示");
    SetTargetFPS(60); // 设置帧率不影响定时精度,因为用的是绝对时间

    // 初始化时间戳为程序启动时的时间
    last_increment_time = GetTime();

    while (!WindowShouldClose()) {
        BeginDrawing();
        ClearBackground(RAYWHITE);

        // 调用递增逻辑,非阻塞,每次帧循环检查一次
        var_increment();

        // 这里可以添加你的其他业务逻辑,和递增操作并行执行
        DrawText(TextFormat("当前递增数值: %d", increment), 20, 20, 30, DARKGRAY);

        EndDrawing();
    }

    CloseWindow();
    return 0;
}

关键细节说明

  • 非阻塞原理:所有逻辑都在Raylib的主循环内执行,var_increment只是做一次时间差检查,不会暂停整个程序,其他代码(比如UI绘制)可以同时运行。
  • 时间精度:Raylib的GetTime()返回高精度浮点数(通常是毫秒级),足以满足绝大多数定时需求。
  • 无需线程:避免了多线程的同步问题,适合Raylib这类单线程游戏框架的开发模式。
  • 灵活调整:修改INCREMENT_INTERVAL的值就能直接改变递增间隔,无需改动核心逻辑。

内容的提问来源于stack exchange,提问作者lightleviathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:24:56