winmsg-executor

Crates.iowinmsg-executor
lib.rswinmsg-executor
version0.2.1
sourcesrc
created_at2024-06-12 13:28:08.408535
updated_at2024-12-01 15:27:57.625722
descriptionPer-thread async rust executor for windows
homepage
repositoryhttps://github.com/timokroeger/winmsg-executor
max_upload_size
id1269644
size43,563
Timo Kröger (timokroeger)

documentation

README

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.

Alternative Backend: async-task

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

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.

Commit count: 54

cargo fmt