libuv будет объединять вызовы uv_async_send(), то есть не каждый вызов приведет к выполнению обратного вызова. Например: если uv_async_send() вызывается 5 раз подряд до вызова обратного вызова, обратный вызов будет вызван только один раз. Если 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
?
ИЗМЕНИТЬ
- Согласно этому обсуждению это делает независимо от того, какой поток вызывает
uv_async_init
. - Согласно ответу на предыдущий вопрос, необходимо позаботиться об удалении
uv_async_t
только после того, как обратный вызов закрытия, переданныйuv_close
, был был вызван.