1个不稳定版本
0.1.0 | 2024年3月7日 |
---|
#1517 in 游戏开发
16KB
220 行
Wolf Engine Events
Wolf Engine的事件系统。
特性
- 一个简单、类似Channel的API。
- 动态类型的事件API。
许可证
Wolf Engine Events的许可证可以是以下之一
由您选择。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,如Apache-2.0许可证中定义的,应作为上述双重许可,不附加额外条款或条件。
lib.rs
:
为Wolf Engine提供事件系统。
示例
此模块提供了一个基于发送者/接收者/消息通道的FIFO(先进先出)事件系统,该通道在 std::sync::mpsc 中找到。
创建事件队列
#
let (event_sender, event_receiver) = mpsc::event_queue();
#
处理事件
EventReceiver
会收集传入的事件,并将它们存储起来,直到它们准备好处理。传入事件的顺序始终得到保留。
在循环中查询队列中的事件。查询事件需要您具有对事件队列的可变访问权限。
#
#
while let Some(event) = event_receiver.next_event() {
match event {
EventType::Event => (), // Handle the event.
}
}
发送事件
要将事件发送到 EventReceiver
,我们使用 EventSender
。事件发送者就像一个隧道,您可以通过它发送数据,它将在另一端弹出。
#
event_sender.send_event(EventType::Event);
克隆和转移 EventSender
的所有权
事件发送者非常有用,因为它们可以被自由且安全地克隆,并将所有权转移到需要发送事件的其它代码上。这使您可以从无法访问事件队列的代码中发送事件。
#
#
#
#
#
// The EventSender can be cloned, and freely passed around.
let other_type = SomeOtherType::new(event_sender.clone());
some_other_function(&event_sender);
// The original EventSender is unaffected.
event_sender.send_event(EventType::Event);
将 EventSender
发送到另一个线程
事件发送者可以安全地发送到其他线程。
#
// This EventSender stays on the main thread with the EventReceiver.
event_sender.send_event(EventType::Event);
// The clone is moved to the other thread.
let thread_sender = event_sender.clone();
std::thread::spawn(move || {
thread_sender.send_event(EventType::Event);
}).join();
依赖关系
~325–800KB
~19K SLoC