#async-task #async-executor #thread #message #per-thread #window #future

winmsg-executor

针对Windows的线程异步Rust执行器

1个不稳定发布

0.1.0 2024年6月12日

#1860 in 异步


kbremap中使用

MIT/Apache

27KB
440

winmsg-executor

针对Windows的线程异步Rust执行器。每个任务都由一个仅消息窗口支持。执行器线程运行本地的Windows消息循环,将唤醒消息派发到任务的窗口过程,该过程轮询任务未来。

特性

  • 由于任务未来不需要SendSync,因此在线程内轻松共享数据。
  • 在同一线程上运行多个任务。任务可以创建新任务并等待结果。
  • 模态窗口(如菜单)不会阻塞同一线程上运行的其他任务。
  • 实现具有状态的闭包的窗口过程的辅助代码。

备用后端: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许可证定义的您有意提交以包含在工作中的任何贡献,将按照上述方式双授权,没有任何额外的条款或条件。

依赖项

约11–18MB
约229K SLoC