int uv_run(uv_loop_t* loop,uv_run_mode mode) uv_run_mode: UV_RUN_DEFAULT:運行事件循環,直到沒有更多活動和引用的句柄或請求為止。如果uv_sotp() 被調用並且仍然有活動的句柄或請求,則返回非零值。在所有其他情況下,返回零。 UV_RUN_ONCE: 輪詢一次I / O。請注意,如果沒有掛起的回調,此函數將阻塞。完成后返回零。 UV_RUN_NOWAIT: 對I/O進行一次輪詢,但如果沒有待處理的回調,則不會阻塞。
/* uv_run */
#include <cstdio> #include <stdio.h> #include <stdlib.h> #include <libuv/uv.h> #include <inttypes.h> #include <cstdio> #include <stdio.h> #include <stdlib.h> int main() { uv_loop_t* loop = (uv_loop_t*)malloc(sizeof(uv_loop_t)); // 初始化給定的uv_loop_t結構。 uv_loop_init(loop); printf("Now quitting.\n"); //此函數不是線程安全的 uv_run(loop, UV_RUN_DEFAULT); //釋放所有內部循環資源。僅當循環完成執行並且所有打開的句柄和請求已關閉時才調用此函數,否則它將返回UV_EBUSY。 uv_loop_close(loop); //此函數返回后,用戶可以釋放為循環分配的內存。 free(loop); return 0; }
/* uv_idle_t 與 uv_prepare_t */
#include <cstdio> #include <stdio.h> #include <stdlib.h> #include <inttypes.h> #include <unistd.h> #include <libuv/uv.h> int64_t counter = 0; void idle_cb(uv_idle_t* handle) { printf("1:Idle callback\n"); counter++; if (counter >= 1) {
//停止句柄,回調函數將不會再被調用。 uv_stop(uv_default_loop()); printf("1:uv_stop() called\n"); } } void prep_cb(uv_prepare_t* handle) { printf("Prep callback\n"); } int main() { //空閑句柄 uv_idle_t idler; //准備手柄 uv_prepare_t prep; //初始化句柄。此功能始終成功。 uv_idle_init(uv_default_loop(), &idler); uv_idle_start(&idler, idle_cb); //prepare句柄將在 每個uv_default_loop()循環迭代中, 運行一次回調。 uv_prepare_init(uv_default_loop(), &prep); uv_prepare_start(&prep, prep_cb);
//啟動事件循環 uv_run(uv_default_loop(), UV_RUN_DEFAULT); return 0; }
/* uv_interface_address_t */
int main() { char buf[512]; //系統信息接口結構指針 uv_interface_address_t* info; int count, i; //獲取接口信息 uv_interface_addresses(&info, &count); i = count; printf("獲取到 %d 接口卡信息:\n \n", count); while (i--) { uv_interface_address_t interface = info[i]; if (interface.address.address4.sin_family == AF_INET) { printf("名稱: %s\n", interface.name); uv_ip4_name(&interface.address.address4, buf, sizeof(buf)); printf("IPv4 address: %s\n", buf); } else if (interface.address.address4.sin_family == AF_INET6) { printf("名稱: %s\n", interface.name); uv_ip6_name(&interface.address.address6, buf, sizeof(buf)); printf("IPv6 address: %s\n", buf); } else { printf("其他: %s\n", interface.name); } printf("\n"); } uv_free_interface_addresses(info, count); return 0; }