首页 > 其他分享 >libuv多线程简单应用示范

libuv多线程简单应用示范

时间:2023-10-11 15:33:53浏览次数:34  
标签:thread void uv timer 示范 async 多线程 libuv loop

 

#include <stdio.h>

#include <uv.h>

// 声明回调函数
void asyncCallback(uv_async_t* handle);
void close_cb();

void thread_func_1(void *arg);
void thread_func_2(void *arg);

// 定时器回调函数
void timer_callback(uv_timer_t* handle) {
    // 定时器触发后执行的操作
    printf("Timer triggered!\n");
    fflush(stdout);
}

// 定义全局的事件循环对象
uv_loop_t *loop;
// 定义异步处理器结构体
uv_async_t async;

int main()
{
    // 创建事件循环
    loop = uv_default_loop();

    // 创建线程
    uv_thread_t thread_1, thread_2;

    if(uv_thread_create(&thread_1, thread_func_1, loop))
    {
        printf("create thread1 fail!\n");
        fflush(stdout);
    }

    if(uv_thread_create(&thread_2, thread_func_2, loop))
    {
        printf("create thread2 fail!\n");
        fflush(stdout);
    }

    // 等待线程执行结束
    uv_thread_join(&thread_1);
    uv_thread_join(&thread_2);

    // 清理并关闭事件循环
    uv_loop_close(loop);

    return 0;
}

// 实现回调函数
void asyncCallback(uv_async_t* handle)
{
    printf("asyncCallback\n");
    fflush(stdout);

    uv_close((uv_handle_t*)&handle, close_cb);    //如果async没有关闭,消息队列是会阻塞的
}

void close_cb()
{
    printf("close_cb\n");
    fflush(stdout);
}

void thread_func_1(void *arg)
{
    uv_loop_t *loop_v = arg;
    uv_timer_t timer;

    // 初始化定时器句柄
    uv_timer_init(loop_v, &timer);

    // 启动定时器
    uv_timer_start(&timer, timer_callback, 0, 1000);  // 每隔1s触发一次定时器

    // 启动事件循环
    uv_run(loop_v, UV_RUN_DEFAULT);

    printf("uv_run\n");
    fflush(stdout);
}

void thread_func_2(void *arg)
{
    uv_loop_t *loop_v = arg;
    
    if(uv_loop_alive(loop_v))
    {
        uv_async_init(loop_v, &async, asyncCallback);

        // 发送异步事件
        uv_async_send(&async);
    }

    printf("thread_func_2\n");
    fflush(stdout);
}

:uv_async_init()和uv_async_send()放在一个线程中

 

运行结果:

 

标签:thread,void,uv,timer,示范,async,多线程,libuv,loop
From: https://www.cnblogs.com/y-z-h/p/17757308.html

相关文章

  • libuv库简单使用
    libuv是跨平台、轻量级的异步I/O库,由Node.js团队发起和维护。它提供了事件循环、定时器、异步文件和网络操作等功能,使开发者可以方便地处理各种I/O任务。libuv提供了一套强大而易用的异步I/O编程接口,在网络编程、文件系统操作、定时器等方面具有广泛的应用场景。由于其开源、跨平......
  • linux 多线程写
      pread 和 pwrite 函数是linux下C语言编程中非常好用的IO操作函数。它们属于系统调用,在2.1.60之后版本的linux下都可以使用,尤其适合用于多线程的应用中,它们允许多个线程操作同一个文件描述符,不会互相影响彼此的文件偏移(offset)。 pread和pwrite函数所需......
  • 多线程分批处理数据(控制服务器cpu,控制数据库cpu)
    packageip;importcom.google.common.collect.Lists;importlombok.extern.slf4j.Slf4j;importjava.util.List;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/***功能描述:总思路,根据业务......
  • 多线程使用场景三-异步调用
         ......
  • 多线程使用场景二(数据汇总)
       ......
  • python多线程
    importdatetimeimportthreadingfromtimeimportsleep#创建一个信号量,限制最多同时运行2个线程semaphore=threading.Semaphore(2)#创建一个线程锁threadLock=threading.Lock()defworker(i):withsemaphore:current_datetime=datetime.datet......
  • 多线程,线程同步(synchronized),并发问题
    多个线程同时操作一个对象,就会出现并发问题,所以需要线程同步,线程同步是一种等待机制。 线程同步的形成条件:队列+锁(锁就是例如上厕所,一个进去锁住避免其他进入。到下一个进去再锁住)线程同步来解决线程的不安全性弊端!: ......
  • 多线程,守护线程daemon
    简介: 下面例子:首先两个线程类实现Runnable接口 然后在主线程模拟一下上帝守护你 其中,setDaemon方法可以切换线程模式......
  • 多线程,线程优先级Priority
    线程优先级(Priority)用数字表示,范围从1~10,优先级越高,给的资源就多一点,被执行的可能就高一些  优先级默认为5 注意!!!要先设置优先级再启动线程!!! ......
  • 多线程,线程状态-停止
    五大线程状态!1、创建状态2、就绪状态3、运行状态4、阻塞状态5、死亡状态如下图: 这里主要先学习线程的停止  ......