5 unstable releases

0.3.0 Dec 24, 2024
0.2.1 Dec 1, 2024
0.2.0 Nov 24, 2024
0.1.1 Aug 27, 2024
0.1.0 Jun 12, 2024

#671 in Asynchronous

Download history 11/week @ 2024-09-13 19/week @ 2024-09-20 18/week @ 2024-09-27 5/week @ 2024-10-04 2/week @ 2024-11-15 126/week @ 2024-11-22 148/week @ 2024-11-29 19/week @ 2024-12-06 3/week @ 2024-12-13 107/week @ 2024-12-20 16/week @ 2024-12-27

156 downloads per month
Used in kbremap

MIT/Apache

39KB
764 lines

winmsg-executor

Crates.io Crates.io License docs.rs

Per-thread async Rust executor for Windows. Each task is backed by a message-only window. The executor thread runs the native Windows message loop, which dispatches wake messages to the task's window procedure, which polls the task future.

Features

  • Easy data sharing within a thread because Send or Sync is not required for the task future.
  • Runs multiple tasks on the same thread. Tasks can spawn new tasks and await the result.
  • Modal windows like menus do not block other tasks running on the same thread.
  • Helper code to implement window procedures with closures that can have state.

Comparison with similar crates

Both of the listed crates run one task/future per thread and expose only block_on(). Is block_on an executor?

windows-executor

  • Polls its future directly from the message loop.
  • Does not create a window at all: Wakers store the message loop's thread id and notifies it with PostThreadMessage().
  • Does not close the thread's message loop (no PostQuitMessage() call) when the task future returns.

windows-async-rs

  • Polls directly from the message loop even when receiving broadcast messages unrelated to the task.
  • Questionable use of unsafe code

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~9–17MB
~212K SLoC