1个不稳定发布
0.1.0 | 2024年6月12日 |
---|
#1860 in 异步
在kbremap中使用
27KB
440 行
winmsg-executor
针对Windows的线程异步Rust执行器。每个任务都由一个仅消息窗口支持。执行器线程运行本地的Windows消息循环,将唤醒消息派发到任务的窗口过程,该过程轮询任务未来。
特性
- 由于任务未来不需要
Send
或Sync
,因此在线程内轻松共享数据。 - 在同一线程上运行多个任务。任务可以创建新任务并等待结果。
- 模态窗口(如菜单)不会阻塞同一线程上运行的其他任务。
- 实现具有状态的闭包的窗口过程的辅助代码。
备用后端:async-task
由backend-async-task
cargo功能选择。使用async-task
任务抽象代替每个任务一个窗口来存储未来。调度任务意味着将其可运行状态发布到线程的消息队列(类似于下面的windows-executor
)。
与类似crate的比较
这两个列出的crate在其每个线程上运行一个任务/未来,并仅公开block_on()
。 block_on 是执行器吗?
windows-exeuctor
- 直接从消息循环轮询其未来。
- 根本不创建窗口:Waker存储消息循环的线程ID,并通过
PostThreadMessage()
通知它。 - 当任务未来返回时,不会关闭线程的消息循环(没有
PostQuitMessage()
调用)。
windows-async-rs
- 即使在接收与任务无关的广播消息时,也直接从消息循环中轮询。
- 对不安全代码的使用存在疑问
许可证
许可如下
- Apache许可证,版本2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
由您自行选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,将按照上述方式双授权,没有任何额外的条款或条件。
依赖项
约11–18MB
约229K SLoC