菜鸟练习3

例子3:
libev实现捕获SIGINT信号
写一个类,使用类的成员函数捕获这个异步事件,并打印当前系统时间。
这个类统计捕获SIGINT信号的次数。

main.cpp

#include <ev++.h>
#include "time.h"

int main()
{

    ev::default_loop Loop;

    ev::sig SigEv(Loop);
    SigEv.set_(NULL, UserTime::SignalCb);
    SigEv.start(SIGINT);

    Loop.run();
    return 0;
}

time.h

#ifndef TIMEA_H__
#define TIMEA_H__
#include <iostream>
#include <ev++.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/unistd.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

typedef struct
{
    int year;
    int mon;
    int day;
    int hour;
    int sec;
} TIME_TYPE;

class UserTime
{
public:
    UserTime(){};
    ~UserTime(){};

    static void SignalCb(struct ev_loop *loop, struct ev_signal *w, int revents);

public:
    static int count;
};

int UserTime::count = 0;

void UserTime::SignalCb(struct ev_loop *loop, struct ev_signal *w, int revents)
{
    (void)w;
    (void)revents;
    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:%02d\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));
    count++;
    printf("信号发送了%d次\n", count);
}

#endif

有时候发现自己会的知识其实并没有是真的会、真的理解
据比如静态成员函数与变量的用法,还是反复去看了好几遍
还是自己太菜了,不过自己解决bug真的很爽,自己有在思考问题,
以前只有一不懂就问别人,没有自己想过,哈哈哈哈 路漫漫加油呀

结果
菜鸟练习3

上一篇:2169 笨鸟先飞


下一篇:Python-1.6元组