によって呼び出されることを確認しますasynchonousコールバックが<a href="http://docs.libuv.org/en/v1.x/async.html?highlight=uv_async_send" rel="nofollow noreferrer">documentation of libuv states</a> libuv
libuvはつまり、それまでではないすべての呼び出し は、コールバックの実行をもたらすだろう、()をuv_async_sendの呼び出しを合体します。たとえば、 uv_async_send()が呼び出される前に行が5回呼び出された場合、 が呼び出されると、コールバックは1回だけ呼び出されます。 uv_async_send()がコールバックが呼び出された後に再び が呼び出されると、それは再び呼び出されます。
だから場合には、私はuv_async_send()
に電話をかけるたびに、私のコールバックが正しいペイロードと呼ばれ、それが明確なuv_async_t
ハンドルを有していれば取得します保証を必要としますか?たとえば、新しいuv_async_t
をヒープに割り当て、そのdata
のメンバーを記入して、uv_async_init
とuv_async_send
とコールし、処理コールバックでuv_close
を使用してハンドルを閉じてから削除しますか?どのスレッドがuv_async_t
を構成し、どのスレッドがuv_async_init
を呼び出すかは重要ですか?
EDIT
- this discussionによればスレッドが
uv_async_init
を呼び出し問題はありません。 - answer to a previous questionによると、
uv_close
に渡されたクローズコールバックが呼び出された後でのみ、uv_async_t
を削除するように注意する必要があります。
もっと簡単な解決策を望んでいましたが、正しく理解すれば 'uv_async_init'をループの開始前に呼び出す必要がありますか? – sigy
必ずしもそうではありませんが、ループスレッドで呼び出す必要があります。 – saghul