libuv::线程

 

 

#include <cstdio>
#include <stdio.h>
#include <stdlib.h>
#include <libuv/uv.h>
#include <unistd.h>

uv_loop_t* create_loop()
{
    uv_loop_t* loop = (uv_loop_t*)malloc(sizeof(uv_loop_t));
    if (loop) {
        uv_loop_init(loop);
    }
    return loop;
}

void signal_handler(uv_signal_t* handle, int signum)
{
    printf("Signal received: %d\n", signum);
    uv_signal_stop(handle);
}
/*线程中运行循环*/
void thread_worker(void* userp)
{
    //获取线程ID
    uv_thread_t self_id = uv_thread_self();
    printf("thread id = %lu\n", self_id);

    uv_loop_t* loop2 = create_loop();
    uv_loop_t* loop3 = create_loop();

    uv_signal_t sig2;
    uv_signal_init(loop2, &sig2);
    uv_signal_start(&sig2, signal_handler, SIGUSR1);

    uv_signal_t sig3;
    uv_signal_init(loop3, &sig3);
    uv_signal_start(&sig3, signal_handler, SIGUSR1);

    while (uv_run(loop2, UV_RUN_NOWAIT) || uv_run(loop3, UV_RUN_NOWAIT)) {
    }
}

int main()
{
    printf("PID %d\n", getpid());

    uv_thread_t thread;
    uv_thread_create(&thread, thread_worker, 0);
    //等待子线程结束
    uv_thread_join(&thread);
    return 0;
}

 

posted @ 2020-12-06 16:05  osbreak  阅读(216)  评论(0编辑  收藏  举报