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; }