https://github.com/liigo/uvx
libuvx is a libuv-based network extension library focusing on usability
https://github.com/liigo/uvx
Last synced: 17 days ago
JSON representation
libuvx is a libuv-based network extension library focusing on usability
- Host: GitHub
- URL: https://github.com/liigo/uvx
- Owner: liigo
- License: mit
- Created: 2014-09-23T06:55:34.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2019-01-16T09:48:45.000Z (over 6 years ago)
- Last Synced: 2025-04-08T00:41:38.288Z (about 1 month ago)
- Language: C
- Homepage:
- Size: 67.4 KB
- Stars: 10
- Watchers: 4
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
uvx
===A libuv based network extension library focusing on usability.
Please ref [uvx.h](uvx.h) for detailed document.
## Build
```
cd build
cmake .
make
```## Test
```
cd test/build
cmake .
make
```## 与 WX/QT/MFC 等其他消息循环的整合应用
- 初始化UV和UVX(在窗口创建之前或之后均可)
```c
g_uvloop = uv_default_loop();
uvx_client_config_t config = uvx_client_default_config(&g_xclient);
config.on_recv = xclient_on_recv;
uvx_client_connect(&g_xclient, g_uvloop, "127.0.0.1", 8001, config);
```- 在 Timer 或 Idle 事件内不断地调用 `uv_run(g_uvloop, UV_RUN_NOWAIT);` 以驱动libuv运转
该调用仅执行少数必要的动作,会很快返回,不会明显影响现有消息循环。
注意不能用 `UV_RUN_ONCE`,它会阻塞UI线程;更不能用 `UV_RUN_DEFAULT`,两个消息循环会打架。
这里不推荐在独立线程中执行 `uv_run(g_uvloop, UV_RUN_DEFAULT);`,它会引入不必要的线程同步机制,使得代码复杂化。
- 终结UVX和UV(在窗口关闭之后)
```c
uvx_client_shutdown(&g_xclient);
// uv_stop(g_uvloop);
uv_run(g_uvloop, UV_RUN_DEFAULT);
uv_loop_close(g_uvloop);
```注意这里使用 `UV_RUN_DEFAULT`。 单次调用 `UV_RUN_NOWAIT` 或 `UV_RUN_ONCE` 均不足于确保等到 libuv 消息循环正常终结。
正常情况不需要调用 `uv_stop()`。但如果你程序中还有 libuv 的 handle 或 request 未处理,先调用 `uv_stop()` 可避免 `uv_run()` 内部死循环无法正常返回,确保进程退出。
## License
MIT