6

たとえば、私は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、ループがブロック モードに移行して新しいイベントを待機する前に呼び出されたかどうかを確認します)。

4

1 に答える 1

6

UV_RUN_DEFAULT で uv_run を実行すると、ブロッキング呼び出しになります。ただし、uv_stop を使用すると、uv_run はすぐに戻ります。スレッド セーフな uv の唯一の関数は uv_async_send であることを思い出してください。したがって、TcpServer ループで uv_stop を呼び出したい場合は、ループ内から実行する必要があります。

于 2014-05-26T08:54:20.673 に答える