1. 程式人生 > 其它 >菜鳥練習2

菜鳥練習2

技術標籤:C++相關學習c++

例子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)