tbox提供了两种定时器:
一种是基于最小堆的高精度定时器,精确到ms级别,但是时间复杂度在O(logn)
还有一种就是基于timing-wheel时间轮算法的低精度定时器,时间复杂度仅为O(1),实常数级别的,相当的快。
这个定时器是参考了linux内核的timer算法实现,不过linux那个比较通用,实现复杂,tbox中为了考虑精简性和低资源,对其算法做了精简
使得其资源占用更小,效率更高,但是使用场景上会有些限制,可以根据自己的实际情况,来判断使用需要用这个定时器来优化性能,还是使用高精度版本。
ltimer低精度定时器,提供了几种精度模式:
ltimer考虑到资源问题,同时只能使用一种精度级别,不能够像linux的timer那么通用,但实现更加简单了。。
tbox内部提供了两种定时器实现:timer和ltimer
这里主要讲解下,如何使用timer实现高精度的定时器任务,精确到ms级别,对于低精度的ltimer,可以参考:低精度定时器的使用
下面先给个简单的例子来说明:
/* 定义一个定时器任务处理函数
*
* @param killed 表示当前任务是否被tb_timer_task_kill强行kill掉的
* @param priv 投递任务时传入的用户自定义数据指针
*/
static tb_void_t tb_demo_timer_task_func(tb_bool_t killed, tb_cpointer_t priv)
{
}
/* 投递一个定时器任务到全局timer中,间隔1000ms,会重复执行
*
* 其中tb_true表示是否会重复执行,如果设为tb_false,那么只会执行一次
* tb_null参数,就是传入给任务函数的用户自定义数据指针
*/
tb_timer_task_post(tb_timer(), 1000, tb_true, tb_demo_timer_task_func, tb_null);
这个doxygen插件比较简单,说白了就是一键生成工程文档,只需要执行下面这行命令就行了
xmake doxygen
当然你也可以指定输出目录,可以工程源码目录:
xmake doxygen -o /tmp/output project/src
什么是选项的绑定呢?
例如我想在命令行中配置一个smallest的参数:xmake f --smallest=y
这个时候,需要同时禁用多个其他的选项开关,来禁止编译多个模块,就是这个需求,相当于一个选项 与其他 多个选项之间 是有联动效应的。。
那如何实现呢,可以通过下面两个api来实现:
tbox里面针对三个正则库(pcre/pcre2/posix)进行了封装,实现接口统一和跨平台处理,只要xmake在编译配置的时候自动检测到其中一种库,就可以使用了,一般会优先使用pcre2。
如果你不想过多的依赖第三方库,可以切换到posix的正则,调用 xmake f --pcre=false --pcre2=false
把pcre的库禁用了就行了。
首先给个最简单的匹配单个子串的例子:
// 执行简单匹配,第二个参数是匹配模式,默认传0就行了
tb_vector_ref_t results = tb_regex_match_done_simple("(\\w+)\\s+?(\\w+)", 0, "hello world");
if (results)
{
// 遍历匹配到的结果
tb_for_all_if (tb_regex_match_ref_t, entry, results, entry)
{
// 打印匹配到的子串的起始偏移、长度、和内容
tb_trace_i("[%lu, %lu]: %s", entry->start, entry->size, entry->cstr);
}
// 销毁匹配到的结果数据
tb_vector_exit(results);
}
输出结果如下:
[0, 11]: hello world
[0, 5]: hello
[6, 5]: world