Code Bye

怎么样让libevent的线程优雅的退出

下面是一个专门用来处理libevent的线程的代码 (不好描述啊…但本人想大家应该懂得本人说的)
sometype * obj = nullptr;
resource * res = nullptr;
do
{
    obj = new sometype;
    if (nullptr == obj)
    {
        break;
    }
    res = new resource;
    if (nullptr == res)
    {
        break;
    }
    event_base_dispatch(base);
} while (false);
delete sometype;
delete resource;

我们知道程序会一直阻塞(不能叫阻塞,但暂且这么说吧)在event_base_dispatch(base);
windows调试时,在delete处断点,当程序退出时(本人只知道关闭程序或shift+F5来退出),但断点没跑过来
所以,本人想程序能否有执行这一句?
其实,就是想问一个问题,假如让此线程优雅的退出
本人想,可能要创建一个event(具体是什么事件没想出来),退出时,调用这个event的回调(回调中处理资源的释放问题),但退出时会触发一个什么事件呢,不清楚啊…

解决方案

50

event_loopbreak

20

不要企图优雅的结束(原因是这是不可能办到的)
而要在烂的不能再烂的摊子上也能重整河山!

5

引用:
Quote: 引用:
Quote: 引用:

不要企图优雅的结束(原因是这是不可能办到的)
而要在烂的不能再烂的摊子上也能重整河山!

本人就知道你会这么说… 

那你知不知道当你想让libevent的线程优雅地退出时,可能会停电、地震、海啸或世界末日呢?

额 造谣是会被抓的

10

本来就是一个线程的东西,怎样算是达到了优雅的效果呢?

55

看上去代码所在的线程应该是本人负责的没有人去控制,假如有控制的,可以把资源释放注册到控制者上面,
然后控制者去中止线程,然后做资源检测。假如没有控制的,可以注册到某个全局的东西上,例如某个对象的析构函数,不过这样的风险大,存在依赖问题。还或不用动态分配的资源,直接用静态的。至于断电,海啸的,尽人事,听天命吧。

50

监听pipe管道, write 1字节唤醒退出, join回收线程。

10

你的线程这样写,表示在别的地方没有需要让她结束的要求。否则就会有 cancel 标识。
那么旧部需要考虑结束。
假如,整个进程被终结了,该线程无论怎么结束都是优雅的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样让libevent的线程优雅的退出