例如我有 2个帖子。我想从主线程(线程1)停止服务器。
主题1:主程序
主题2:TcpServer
来自libuv库:
/*
* This function will stop the event loop by forcing uv_run to end
* as soon as possible, but not sooner than the next loop iteration.
* If this function was called before blocking for i/o, the loop won't
* block for i/o on this iteration.
*/
UV_EXTERN void uv_stop(uv_loop_t*);
这意味着,如果我在主线程中调用uv_stop(tcp_server_loop)
并且由于tcpserver上没有事件而阻塞服务器循环,那么服务器将仍然处于循环中直到出现某个事件。 (它可能会检查在循环进入块模式之前是否调用uv_stop
以等待新事件)。
答案 0 :(得分:4)
如果你使用UV_RUN_DEFAULT运行uv_run,它将是一个阻塞调用。但是,如果你使用uv_stop,那么uv_run会立即返回。请记住,uv中唯一的线程安全函数是uv_async_send,因此如果要在TcpServer循环上调用uv_stop,则可以在循环内执行此操作。