1. 架构设计
- 定义数据结构:用于存储采集的数据。
- 模块
moduleA
:负责数据采集,动态分配内存存储数据,并通过回调函数将数据传递给 moduleB
。
- 模块
moduleB
:提供回调函数,接收 moduleA
传递的数据并进行处理,处理完成后通知 moduleA
释放内存。
2. 关键代码片段
定义数据结构
// 定义数据结构用于存储采集的数据
typedef struct {
int data[100]; // 假设采集的数据是一个整数数组
int length;
} Data;
moduleA
代码
#include <stdio.h>
#include <stdlib.h>
// 回调函数指针类型定义
typedef void (*DataProcessCallback)(Data*);
// moduleA 采集数据并通过回调传递给 moduleB
void moduleA(DataProcessCallback callback) {
Data *data = (Data *)malloc(sizeof(Data));
if (data == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return;
}
// 模拟数据采集
data->length = 10;
for (int i = 0; i < data->length; i++) {
data->data[i] = i;
}
// 通过回调函数将数据传递给 moduleB
callback(data);
}
moduleB
代码
#include <stdio.h>
#include <stdlib.h>
// moduleB 的回调函数,处理数据
void moduleBProcess(Data *data) {
// 处理数据
printf("moduleB received data: ");
for (int i = 0; i < data->length; i++) {
printf("%d ", data->data[i]);
}
printf("\n");
// 处理完成后通知 moduleA 释放内存
free(data);
}
主函数
#include <stdio.h>
int main() {
// 将 moduleB 的回调函数传递给 moduleA
moduleA(moduleBProcess);
return 0;
}
3. 说明
- 数据结构
Data
:定义了存储采集数据的结构,这里假设采集的数据是一个整数数组及数组长度。
moduleA
:通过 malloc
动态分配内存创建 Data
结构体实例,模拟数据采集后,调用传入的回调函数将数据传递给 moduleB
。
moduleB
:提供 moduleBProcess
回调函数,接收 moduleA
传递的数据进行处理,处理完成后通过 free
释放 moduleA
分配的内存,确保内存管理正确。
- 主函数:将
moduleB
的回调函数 moduleBProcess
传递给 moduleA
,触发数据采集和传递流程。