菜鳥練習2
阿新 • • 發佈:2020-12-28
例子2:
libev實現捕獲SIGINT訊號,使用全域性函式處理這個非同步事件,並列印當前系統時間。
main.cpp
#include <iostream> #include <ev++.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <sys/unistd.h> #include <time.h> using namespace std; ev_signal signal_w; typedef struct { int year; int mon; int day; int hour; int min; int sec; } TIME_TYPE; void signal_action(struct ev_loop *main_loop, ev_signal *signal_w, int e) { time_t rawtime; struct tm *tm_type; struct timeval ttime; time(&rawtime); tm_type = localtime(&rawtime); gettimeofday(&ttime, NULL); printf("\n當前時間為:%04d-%02d-%02d %02d:%02d:%02d:%d\n", tm_type->tm_year + 1900, tm_type->tm_mon + 1, tm_type->tm_mday, tm_type->tm_hour, tm_type->tm_min, tm_type->tm_sec, (ttime.tv_usec / 1000)); } int main() { struct ev_loop *main_loop = ev_default_loop(EVFLAG_SIGNALFD); ev_init(&signal_w, signal_action); ev_signal_set(&signal_w, SIGINT); ev_signal_start(main_loop, &signal_w); ev_run(main_loop, 0); return 0; }
結果:
還有我在網上看到的小例子
ev_signal signal_w; void signal_action(struct ev_loop *main_loop,ev_signal *signal_w,int e) { puts("\nin signal cb \n"); } int main() { struct ev_loop *main_loop = ev_default_loop(EVFLAG_SIGNALFD); ev_init(&signal_w,signal_action); ev_signal_set(&signal_w,SIGINT); ev_signal_start(main_loop,&signal_w); ev_run(main_loop,0); return 0; }
結果:
#./a.out
^C
in signal cb
^C
in signal cb
^\Quit (core dumped)