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
相关产品推荐
相关产品推荐

