Crate winmsg_executor

source ·
Expand description

§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

  • Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

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.

Modules§

  • Helper code to work with windows.

Structs§

Functions§

Type Aliases§

  • An owned permission to join on a task (await its termination).