EN 中文
返回总览

LiteRtLm_WaitUntilDone

引擎心跳驱动接口。阻塞当前线程并泵送异步计算任务。它是连接“任务提交”与“结果回调”的唯一桥梁。

01. 引擎曲轴驱动原理

graph TD Thread[后台心跳线程] -->|Loop Call| API[WaitUntilDone] API -->|1. Poll| GPU[GPU Command Queue] GPU -->|2. Event| API API -->|3. Trigger| Callback[LiteRtLmCallback] Callback -->|4. Resume| Thread
核心设计哲学: DLL 内部不强制创建后台线程,而是将“驱动权”交给宿主。如果不循环调用此函数,GPU 产生的 Token 将堆积在内部队列中,回调函数永远不会被分发。

02. 参数与返回值定义

int LiteRtLm_WaitUntilDone(void* engine_ptr, int timeout_sec);
参数/返回值详细描述
engine_ptr 要驱动的引擎实例句柄。
timeout_sec 单次阻塞的超时时间。设为 0 表示使用默认超时(通常为 600 秒)。
返回值 (int) 状态码:
0: 推理任务已全部正常完成。
1: 单次阻塞超时,但任务仍在进行中。
-1: 引擎发生内部致命错误。

03. 典型的后台驱动循环 (Worker Thread)

// 在一个独立的后台 Thread 中运行
void UMyAiSubsystem::InferenceWorker() {
    while (bIsRunning) {
        // 阻塞并等待 Token 产生
        int Result = LiteRtLm_WaitUntilDone(EngineHandle, 1);
        
        if (Result == 0) {
            // 所有任务完成,进入休眠以节省 CPU
            FPlatformProcess::Sleep(0.1f);
        } else if (Result < 0) {
            UE_LOG(LogTemp, Error, TEXT("Engine Heartbeat Lost!"));
            break;
        }
        // Result == 1 表示仍在产生中,继续下一次循环
    }
}