libuv - 如何停止在另一个线程中运行的tcp服务器

时间:2014-03-11 15:23:15

标签: libuv

例如我有 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以等待新事件)。

1 个答案:

答案 0 :(得分:4)

如果你使用UV_RUN_DEFAULT运行uv_run,它将是一个阻塞调用。但是,如果你使用uv_stop,那么uv_run会立即返回。请记住,uv中唯一的线程安全函数是uv_async_send,因此如果要在TcpServer循环上调用uv_stop,则可以在循环内执行此操作。