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

C++中如何让for循环暂停直至指定bool变量为true后继续执行

实现循环等待游戏状态的方案

适用后台独立线程的方案(推荐,不阻塞游戏主线程)

  • 必须给isInWorld添加volatile修饰,或是声明为C++11及以上标准的std::atomic<bool>,避免编译器优化掉内存读取操作,导致无法获取游戏侧的最新变量值
  • 等待时添加短时长睡眠,避免空转占用100%CPU核心资源

示例代码:

// 变量声明添加volatile修饰
volatile bool isInWorld; 
// C++11以上推荐用线程安全的原子变量写法:std::atomic<bool> isInWorld;

for (int x = 0; x < worldSize.x; x++)
{
    for (int y = 0; y < worldSize.y; y++)
    {
        // 阻塞等待直到进入游戏世界
        while (!isInWorld)
        {
            // Windows平台用Sleep,单位毫秒,这里设16ms对应60帧刷新间隔,可按需调整
            Sleep(16);
            // 非Windows平台可以用标准库写法,需引入<thread> <chrono>头文件
            // std::this_thread::sleep_for(std::chrono::milliseconds(16));
        }

        // 此处填写你要执行的业务逻辑
    }
}

适用游戏主线程的方案(避免卡死游戏)

如果你的代码是运行在游戏主逻辑线程内,不能使用阻塞睡眠,需要把循环拆成分帧执行,放到游戏帧更新回调中调用:

// 全局或者类成员变量存储当前遍历坐标
int currX = 0, currY = 0;

void OnGameFrameUpdate()
{
    // 不在游戏世界内直接跳过当前帧处理
    if (!isInWorld) return;

    // 执行当前坐标的业务逻辑
    // do something with currX currY

    // 遍历坐标步进
    currY++;
    if (currY >= worldSize.y)
    {
        currY = 0;
        currX++;
        // 全部遍历完成后重置坐标
        if (currX >= worldSize.x)
        {
            currX = 0;
            currY = 0;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:48:03