Module Uwt.Async

module Async: sig .. end

Async handles allow the user to "wakeup" the event loop and get a callback called from another (system) thread.

type t 
include Uwt.Handle
val to_handle : t -> Uwt.Handle.t
val create : (t -> unit) -> t uv_result

Creates a new async handle. The handle is not active immediately. You have to use Uwt.Async.start

val start : t -> Int_result.unit

This will increase the reference count of the async handle. Uwt.Main.run will wait until send is called, if there are no other pendings tasks.

val stop : t -> Int_result.unit

Decrease the reference count again

val send : t -> Int_result.unit

Wakeup the event loop and call the async handle's callback.

It's safe to call this function from any system thread. The callback will be called on the loop thread. Uwt.Async.create, Uwt.Async.start, and Uwt.Async.stop however must be called from the main thread.

Warning: libuv will coalesce calls to Uwt.Async.send, that is, not every call to it will yield an execution of the callback. For example: if Uwt.Async.send is called 5 times in a row before the callback is called, the callback will only be called once. If Uwt.Async.send is called again after the callback was called, it will be called again.