Thanks for quick answer Ben.

Yes, this looks like exactly what I need.  *uv_async_send -- Wakeup the 
event loop and call the async handle’s callback.*

Regarding callback coalescing, I think it shouldn't be an issue since I'll 
use a mutex & message queue, and I'll call *uv_async_send* only after the 
message queue has been prepared.  So I don't think the following has a race 
condition:

static uv_async_t async;

// concurrently called by many worker threads, & inc. UV Loop thread.
void push_event(Event evt)
{  
  {
    unique_lock<mutex> guard( queue_mutex );
    my_queue.push_back( evt );
  }
  uv_async_send( &async );
}


// called by UV Loop 
void async_cb(uv_async_t* handle) 
{  
  vector<Event> new_events;
  {
    unique_lock<mutex> guard( queue_mutex );
    new_events.swap( my_queue );
  }

  // ... for each Event in new_events, do uv_tcp_init & uv_tcp_connect
}



-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to