[Omniverse] Omniverse Kit - 核心 IApp 接口

英文原文:https://docs.omniverse.nvidia.com/kit/docs/kit-manual/latest/guide/kit_core_iapp_interface.html

  omni.kit.app 子系统是一个 Kit 核心插件,它定义了 Kit Core 提供的最小功能集,具体来说:

  • Loop runner entry point (循环运行入口点)
  • Extension manager 扩展管理器)
  • Scripting support (脚本支持)
  • General message bus (通用消息总线)
  • Shutdown sequence management (关闭顺序管理)
  • Hang detector (挂起探测器)

Loop runner(循环运行)

  循环运行器是驱动应用程序循环的东西,更具体地说 - 将更新事件推送到相应的更新事件流中并泵送事件流,从而允许模块化的点滴滴答作响。

  在最简单的场景中,循环运行器是确保定期抽取核心事件流的逻辑。 最简单的循环运行器的伪代码:

void update()
{
    preUpdateEventStream->push(...);
    preUpdateEventStream->pump();

    updateEventStream->push(...);
    updateEventStream->pump();

    postUpdateEventStream->push(...);
    postUpdateEventStream->pump();

    messageBus->pump();
}

  这是驱动 Kit 应用程序的最直接的方法,并且可以实现 IRunLoopRunner 的自定义版本并将其提供给应用程序使用。 默认循环运行器接近于伪代码中概述的简单实现,只是添加了少量的速率限制器逻辑和其他少量的维护逻辑。

Extension manager(扩展管理器)

  扩展管理器控制扩展执行流程,维护扩展注册表,并执行其他相关操作。 扩展子系统将单独详细说明,因为这是构成 Kit 应用程序的所有模块化部分的主要入口点。 扩展管理器界面可以通过 Kit Core 应用程序界面访问。

Scripting(脚本编写)

  Kit Core 应用程序设置支持 Python 扩展并执行自定义 Python 脚本和代码片段所需的 Python 脚本环境。 IAppScripting 为该脚本环境提供了一个简单的接口,可用于执行文件和字符串,以及管理脚本搜索文件夹,并订阅将广播所有脚本事件的事件流(例如脚本命令事件、脚本输出事件和脚本错误事件,所有事件都存储在相应的事件类型中)。

General message bus(通用消息总线)

  通用消息总线是一个简单而强大的概念。 这只是一个事件流,在所有更新后每帧泵送一次,任何人都可以使用总线发送和侦听事件。 这在事件流所有权不方便的情况下,或者在建立应用程序范围的事件(例如,显示弹出窗口或类似的事情)时非常有用 - 它可以被所有扩展中的许多消费者使用。 根据事件流指南,建议从字符串哈希派生事件类型。 消息总线使用的简单示例:

import carb.events
import omni.kit.app

BUS_EVENT_TYPE = carb.events.type_from_string("my_ext.SOME_EVENT")

message_bus = omni.kit.app.get_app().get_message_bus_event_stream()

subscription = message_bus.create_subscription_to_pop_by_type(BUS_EVENT_TYPE, on_change)

# 将订阅存储在某处,这样它就不会立即被删除
subs.append(subscription)

Shutdown sequence(关闭顺序)

  应用程序通过退出后查询接收关闭请求。 将记录查询并且应用程序将照常进行,直到在更新逻辑中的定义位置处处理关闭查询。

  在真正的关闭启动之前,查询后事件将被注入到关闭事件流中。 订阅事件流的消费者将有机会请求取消关闭请求。 如果提出请求,则不会发生关闭。 例如,当有未保存的工作待处理时,需要显示对话框弹出窗口确认退出。 如果关闭未被取消 - 另一个事件将被注入关闭事件流中,这次告诉它真正的关闭即将开始。

  但是,可以发布不可取消的退出请求 - 作为紧急措施,以防应用程序需要不间断地关闭。

Hang detector(挂起探测器)

  该应用程序核心还包含一个简单的挂起检测器,该检测器旨在接收定期推送,如果在指定的时间内没有推送,它将通知用户检测到挂起,并且如果用户选择,可能会导致应用程序崩溃。 这很有用,因为崩溃会生成故障转储,使开发人员能够了解发生了什么以及挂起时的调用堆栈。 诸如超时(如果启用)之类的事情以及其他事情可以通过设置进行调整。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值