MST

星途 面试题库

面试题:网络编程中libev事件循环库的基本使用

请简述在libev事件循环库中,如何创建一个简单的定时器事件,并在定时器触发时执行特定的回调函数?请给出关键代码示例及简要解释。
21.6万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 引入头文件
#include <ev.h>
#include <stdio.h>

ev.h 是 libev 库的头文件,stdio.h 用于标准输入输出。

  1. 定义回调函数
static void timer_cb(struct ev_loop *loop, ev_timer *w, int revents) {
    printf("Timer callback fired!\n");
    // 这里可以添加需要在定时器触发时执行的具体代码
}

这个函数是定时器触发时执行的回调函数。loop 是事件循环对象,w 是定时器 watcher,revents 表示触发的事件类型。

  1. 创建和启动定时器
int main() {
    struct ev_loop *loop = ev_default_loop(0);
    ev_timer timer_watcher;

    ev_timer_init(&timer_watcher, timer_cb, 2., 0.);
    // 2. 表示定时器首次触发的延迟时间为 2 秒,0. 表示之后不再重复触发

    ev_timer_start(loop, &timer_watcher);

    ev_run(loop, 0);

    return 0;
}
  • ev_default_loop(0) 获取默认的事件循环对象。
  • ev_timer_init 初始化定时器 watcher,将其与回调函数 timer_cb 关联,并设置首次触发延迟和重复间隔。
  • ev_timer_start 启动定时器。
  • ev_run(loop, 0) 启动事件循环,使程序开始监听事件。

以上代码展示了在 libev 中创建一个简单定时器事件并执行回调函数的基本步骤。注意,实际使用中可能需要根据具体需求进行错误处理等优化。