例子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真的很爽,自己有在思考问题,
以前只有一不懂就问别人,没有自己想过,哈哈哈哈 路漫漫加油呀
结果