C 语言 结构体封装回调函数 例子
时间: 2024-11-04 08:15:01 浏览: 14
在C语言中,结构体(struct)可以用来封装数据和相关的操作,而回调函数是一种设计模式,它允许我们在需要的时候将函数作为参数传递给其他函数。当某个事件发生或满足特定条件时,我们可以调用这个回调函数来处理。
下面是一个简单的例子,假设我们有一个计时器结构体,它包含了开始计时、停止计时以及设置一个回调函数来通知计时结束的功能:
```c
typedef void (*TimerCallback)(void); // 定义回调函数类型
typedef struct {
uint64_t start_time; // 计时开始时间
TimerCallback callback; // 回调函数指针
} Timer;
// 初始化并设置回调函数
void setup_timer(Timer *timer, TimerCallback callback) {
timer->start_time = get_current_time(); // 获取当前时间
timer->callback = callback;
}
// 当计时结束时调用回调
void timer_done(Timer *timer) {
if (timer->callback != NULL) {
uint64_t elapsed_time = get_current_time() - timer->start_time;
timer->callback(); // 调用回调函数,并传递结果(例如,通知用户计时完成)
}
}
int main() {
Timer timer;
setup_timer(&timer, &print_elapsed_time); // 设置回调为打印计时结果
// 开始计时
timer.start_time = get_current_time();
// ... 等待一段时间 ...
// 假设计时结束
timer_done(&timer);
return 0;
}
```
在这个例子中,`print_elapsed_time`是一个具体的回调函数,当定时器结束时,会通过`timer_done`函数调用它来显示计时的结果。
阅读全文