C语言 多线程异步回调
时间: 2023-07-30 21:12:30 浏览: 418
在C语言中,实现多线程异步回调可以使用线程库和回调函数。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// 回调函数类型
typedef void (*callback_func)(void*);
// 异步任务结构体
typedef struct {
int data;
callback_func callback;
} async_task;
// 异步任务处理函数
void* async_task_handler(void* arg) {
async_task* task = (async_task*)arg;
// 模拟耗时操作
sleep(3);
// 执行回调函数
task->callback((void*)&(task->data));
free(task);
pthread_exit(NULL);
}
// 回调函数示例
void callback(void* arg) {
int* result = (int*)arg;
printf("Callback: Result = %d\n", *result);
}
int main() {
pthread_t thread;
async_task* task = (async_task*)malloc(sizeof(async_task));
task->data = 10;
task->callback = callback;
// 创建新线程执行异步任务
pthread_create(&thread, NULL, async_task_handler, (void*)task);
printf("Main thread: Waiting for callback...\n");
// 主线程等待异步任务完成
pthread_join(thread, NULL);
printf("Main thread: Exiting...\n");
return 0;
}
```
在上述示例代码中,我们定义了一个`async_task`结构体,其中包含了一个整数数据和一个回调函数指针。`async_task_handler`函数是异步任务的处理函数,在其中执行耗时操作后会调用回调函数。`callback`函数是回调函数的示例,它接收处理结果作为参数,并在主线程中被调用。
在`main`函数中,我们创建了一个异步任务,并将其数据和回调函数设置好。然后,我们使用`pthread_create`函数创建了一个新线程来执行异步任务。主线程在等待异步任务完成后,再输出相应的信息。
需要注意的是,多线程编程需要仔细处理线程间共享变量的同步与互斥访问,以避免数据竞争等问题。在实际应用中,可能需要更加复杂的线程管理和同步机制。以上只是一个简单的示例,供参考。
阅读全文