LCUI 3.0 开发日志
2021年06月20日 · 1679 字 · 阅读
简介
3.0 版本计划将 LCUI 重构为一个由多个基础库组成的库,每个基础库具备风格统一、耦合度低、易于编译安装等特性。
此文章内容有待继续完善。
libevent
事件库,提供事件循环和事件订阅发布功能。
参考对象:
- https://github.com/enki/libev
- https://github.com/ithewei/libhv
- https://vuejs.org/v2/api/index.html#Instance-Methods-Events
接口设计:
typedef struct event_emitter_t event_emitter_t;
typedef void(event_handler_t)(event_t*);
typedef int event_type_t;
typedef struct event_t event_t;
typedef struct event_listener_t event_listener_t;
typedef struct event_loop_t event_loop_t;
void event_emitter_on(event_emitter_t *emitter, event_type_t type, event_listener_t *listener);
void event_emitter_off(event_emitter_t *emitter, event_type_t type, event_handler_t *handler);
void event_emitter_emit(event_emitter_t *emitter, event_t *e);
void event_loop_new(event_loop_t **loop);
void event_loop_free(event_loop_t **loop);
void event_loop_run(event_loop_t *loop);
void event_loop_stop(event_loop_t *loop);
int event_loop_wait(event_loop_t *loop, unsigned int ms);
void event_loop_post_event(event_loop_t *loop, event_t *ev);
void event_loop_process_events(event_loop_t *loop);
创建事件循环:
void example(void)
{
event_loop_t *loop;
event_loop_new(&loop);
event_loop_run(loop);
event_loop_free(&loop);
}
自定义事件循环:
void example(void)
{
event_loop_t *loop;
event_loop_new(&loop);
while (event_loop_running(loop)) {
if (event_loop_wait(loop)) {
event_loop_process_events(loop);
// do something...
}
}
event_loop_free(&loop);
}
问题:
- 事件解绑接口如何设计?
libtest
单元测试库。
源码来自 test 目录中现有的 libtest.c。
参考对象:
- https://mochajs.org/
接口设计:
void descrite(const char *text, void (*func)());
// test (int)
void test_i(const char *name, int actual, int expected);
// test (bool)
void test_b(const char *name, int actual, int expected);
// test (string)
void test_s(const char *name, const char *actual, const char *expected);
int print_test_result(void);
libcss
CSS 解析库。
文章版权归作者所有,未经许可不得转载。
问题反馈
对此文章有疑问?你可以点击
这里
反馈