-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
libhv什么接口可以替换libevent中的event_new添加信号的功能? #423
Comments
libhv里没有直接提供将signal封装成事件,投递到loop里,你可以这么实现
|
signal_func是signal的回调函数,只能传递int signo这个参数进去,我这边不方便使用全局变量,那我应该怎么把loop这个参数传进去 |
signal本身是中断执行的,上面把这个信号转化为一个有序的事件,扔给指定的loop去处理,你可以看看libevent里面的实现,也是使用一个static event_base* evsig_base来保存这个loop对象的 |
不好意思,之前一直有事耽搁,最近做了一下尝试,想问下对于你写的参考函数 void signal_func(int signo) {
hevent_t ev;
ev.cb = signal_event_cb;
// ...
hloop_post_event(loop, &ev); // 如何传入loop变量
} 我去参考了下signal函数的使用,它仅仅接收一个int参数,用来表示传入的信号,那如何将loop变量传入到signal_func中呢 /* Type of a signal handler. */
typedef void (*__sighandler_t) (int); |
我自己尝试增加一下添加信号的功能,我现在自己做的尝试 // hloop.h
typedef struct hsignal_s hsignal_t;
typedef void (*hsignal_cb) (hsignal_t* hsignal);
HV_EXPORT hsignal_t* hsignal_add(hloop_t* loop, hsignal_cb cb, int signal_type, uint32_t repeat DEFAULT(INFINITE)); // hloop.c
hsignal_t* hsignal_add(hloop_t* loop, hsignal_cb cb, int signal_type, uint32_t repeat){
hsignal_t *hsignal;
HV_ALLOC_SIZEOF(hsignal);
hsignal->signal_type = signal_type;
hsignal->priority = HEVENT_HIGHEST_PRIORITY;
hsignal->repeat = repeat;
EVENT_ADD(loop, hsignal, cb);
return (hsignal_t*)hsignal;
} // hevent.c
struct hsignal_s{
HEVENT_FIELDS
uint32_t repeat;
int signal_type;
}; 现在发现,应当在hloop_process_events中做一些处理,比如添加hloop_process_signal函数,不知道应该怎么做 // hevent.c
int hloop_process_events(hloop_t* loop, int timeout_ms) {
int nios, ntimers, nidles;
nios = ntimers = nidles = 0;
// ...
nios = hloop_process_ios(loop, blocktime_ms);
// ...
ntimers = hloop_process_timers(loop);
// ...
nidles= hloop_process_idles(loop);
// ...
int ncbs = hloop_process_pendings(loop);
return ncbs;
} |
现在我正在实现一个功能,有一个异步事件循环的库libverto,内部实现了libevent,libhv,glib来实现事件循环,我现在正在尝试使用libhv作为底层的事件循环库
这是libverto库中,使用libevent的接口来添加信号处理的功能的位置
现在我想使用libhv替代libevent实现这个功能
我之前尝试了下面这两个函数,我发现是命令行处理的函数,没法达到添加信号的目的
我在这个issue354中找到了有人尝试使用libhv替代libevent,但是我看写的还不完善
不知道需要替代掉event_new这个接口,libhv应该用什么接口实现
The text was updated successfully, but these errors were encountered: