libuv线程池使用示例
时间: 2023-10-23 07:28:31 浏览: 221
以下是一个使用libuv线程池的示例:
```c
#include <stdio.h>
#include <uv.h>
void work_cb(uv_work_t* req) {
// 在线程池中执行的任务
printf("Working...\n");
}
void done_cb(uv_work_t* req, int status) {
// 任务完成后的回调函数
printf("Done!\n");
}
int main() {
uv_loop_t* loop = uv_default_loop();
// 创建线程池
uv_thread_pool_t* pool = malloc(sizeof(uv_thread_pool_t));
uv_thread_pool_create(pool, 4);
// 分配任务
uv_work_t* work_req = malloc(sizeof(uv_work_t));
uv_queue_work(loop, work_req, work_cb, done_cb);
// 运行事件循环
uv_run(loop, UV_RUN_DEFAULT);
// 销毁线程池
uv_thread_pool_destroy(pool);
free(pool);
return 0;
}
```
该示例创建了一个包含4个线程的线程池,并在其中执行一个简单的任务。任务完成后调用done_cb函数进行回调。运行事件循环,直到所有任务完成,然后销毁线程池并退出程序。
相关问题
libuv线程池使用代码
以下是使用libuv线程池的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <uv.h>
#define THREAD_POOL_SIZE 4
void work_cb(uv_work_t *req) {
int *data = (int *) req->data;
printf("Thread %lu is processing data %d\n", uv_thread_self(), *data);
// Simulate some processing time
uv_sleep(1000);
}
void after_work_cb(uv_work_t *req, int status) {
int *data = (int *) req->data;
printf("Thread %lu finished processing data %d\n", uv_thread_self(), *data);
free(data);
free(req);
}
int main() {
uv_loop_t *loop = uv_default_loop();
uv_thread_pool_t pool;
uv_thread_pool_init(&pool, THREAD_POOL_SIZE);
for (int i = 0; i < 10; i++) {
int *data = (int *) malloc(sizeof(int));
*data = i;
uv_work_t *req = (uv_work_t *) malloc(sizeof(uv_work_t));
req->data = (void *) data;
uv_queue_work(loop, &pool, req, work_cb, after_work_cb);
}
uv_run(loop, UV_RUN_DEFAULT);
uv_thread_pool_destroy(&pool);
return 0;
}
```
在此示例代码中,我们使用了libuv线程池来处理10个数据。我们初始化了一个包含4个线程的线程池,并使用`uv_queue_work`函数向线程池中添加工作任务。每个工作任务都会在一个线程中执行,使用`uv_sleep`函数模拟了一些处理时间。一旦工作任务完成,我们会在完成回调函数中释放数据和请求的内存。最后,我们使用`uv_run`函数来运行事件循环,等待所有工作任务完成后退出程序。
libuv的线程池使用代码
以下是使用libuv的线程池的示例代码:
```c
#include <uv.h>
#include <stdio.h>
#define NUM_THREADS 4
void task(void* arg) {
int* num = (int*)arg;
printf("Thread %lu: %d\n", uv_thread_self(), *num);
}
int main() {
uv_thread_t threads[NUM_THREADS];
uv_threadpool_t pool;
// Initialize thread pool
uv_threadpool_create(&pool, NUM_THREADS);
// Add tasks to thread pool
for (int i = 0; i < 10; i++) {
int* num = malloc(sizeof(int));
*num = i;
uv_threadpool_work(&pool, task, num);
}
// Wait for tasks to complete
uv_threadpool_wait(&pool);
// Destroy thread pool
uv_threadpool_destroy(&pool);
return 0;
}
```
该示例创建了一个线程池,添加了10个任务,并等待它们完成。任务函数将打印线程ID和任务参数。
阅读全文