2 releases

0.1.1 Aug 27, 2024
0.1.0 Jun 12, 2024

#793 in Asynchronous

Download history 131/week @ 2024-06-10 6/week @ 2024-06-17 7/week @ 2024-07-01 151/week @ 2024-08-26

151 downloads per month
Used in kbremap

MIT/Apache

28KB
448 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 tasks 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 multiply 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.

Alternative Backend: async-task

Selected by the backend-async-task cargo feature. Uses async-tasks task abstraction instead of a window per task to store the future. Scheduling a tasks means posting its runnable to the threads message queue (similar to windows-executor see below).

Comparison with similar crates

Both of those listed crates run one taks/future per thread in their and expose only block_on(). Is block_on an executor?

windows-exeuctor

  • Polls its future directly from the message loop.
  • Does not create a windows at all: Waker stores the message loops thread id and notifies it with PostThreadMessage().
  • Does not close the threads message loop (no PostQuitMessage() call) when the task futures 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

~13–20MB
~250K SLoC