- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用hiredis和libev库编写一个简单的Redis客户端。
一切都进行得很好,除了停止事件循环-m_thread.join()刚刚卡住了。
将所有初始化工作移到新创建的线程上不会执行任何操作。
这是我的代码的一部分:
RedisSubscriber::Start(){
m_redis = redisAsyncConnect(m_addr.c_str(),m_port);
m_redis-> data =(void *)这个;
m_loop = ev_loop_new(EVFLAG_NOINOTIFY);
redisLibevAttach(m_loop,m_redis);
redisAsyncSetConnectCallback(m_redis,connectCallback);
redisAsyncSetDisconnectCallback(m_redis,disconnectCallback);
redisAsyncCommand(m_redis,subscriptionCallback,NULL,“SUBSCRIBE%s”,m_channel.c_str());
m_thread = boost::thread(ev_loop,m_loop,0);
}
RedisSubscriber::Stop(){
redisAsyncFree(m_redis);
m_thread.join();
m_redis = 0;
}
void RedisSubscriber::connectCallback(const redisAsyncContext * c){
}
void RedisSubscriber::disconnectCallback(const redisAsyncContext * c,int status){
RedisSubscriber * r =(RedisSubscriber *)(c-> data);
ev_unloop(r-> m_loop,EVUNLOOP_ALL);
}
无效RedisSubscriber::subscribeCallback(redisAsyncContext * c,无效* r,无效* privdata){
}
最佳答案
假设您的意思是ev_run
,那么您可以执行以下操作:
boost::thread
ev_async
的回调中,调用ev_async
。 ev_break
调用ev_async_send
。 RedisSubscriber::Stop()
监视程序是线程安全的-它使用内存屏障在线程之间进行同步。 ev_async
将返回。
关于boost-thread - 雇用,libev和boost:threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611126/
这两个库都是为异步 I/O 调度而设计的,并且都在 Linux 上使用 epoll,在 FreeBSD 上使用 kqueue 等。 除了表面上的差异,我的意思是这两个库之间真正的差异是什么?关于架构,
假设我有 2 个正在监视事件的套接字,我真的希望套接字 1 成为首选(即使以耗尽套接字 2 为代价)。我如何用 libev 做到这一点(我问了关于 libuv 的同样问题 here 但看起来 libu
我想使用事件驱动库之一制作基本的聊天服务器。但是选择什么? libevent 或 libev 哪个更好?哪个有更好的 C++ 支持?哪个 rune 在 Windows 中更好?什么更快?更快地开发和理
我正在尝试监控一个 unix 套接字(“/tmp/mysocket”)。 我可以在 Node.js 中很好地做到这一点:当 1) 套接字被绑定(bind),2) 有人连接到套接字,3) 数据被发送到套
我正在尝试向后移植基于 libevent 的库以使用 ASIO 后端(从而避免在单个应用程序中出现多个事件循环)。还有其他方法可以解决“问题”,但我对这个感兴趣 我在 Boost::ASIO 文档中没
我目前正在使用libevent编写多线程应用程序。 某些事件是由IO触发的,但我需要使用event_active()由代码本身跨线程触发的几个事件。 我试图编写一个简单的程序来显示我的问题所在: 使用
我花了一些时间在互联网上搜索寻找更好的方法来分析和调试我的问题,但我似乎找不到解决方案。所以我想我会问。 简要地。我正在尝试创建一个非阻塞 ssl 转发代理。代理的服务器部分使用自签名服务器证书,我使
我有以下代码: #include #include #include #include #include void fd_cb(int fd,short event,void *arg){
我有几个关于 libevent2 及其多线程支持的问题。 libevent 是否支持多线程? 我想实现的是这样的: 在单个线程中创建一个 event_base。 在这个单线程中设置事件并将它们关联到事
我正在遵循this示例。 Line#37表示工作线程数应等于cpu核心数。为什么? 如果有1万个连接,而我的系统有8个核心,这是否意味着8个辅助线程将处理1万个连接?为什么我不应该增加这个数字? 最佳
我正在学习如何使用 Libevent。虽然我无法理解 pending 和 active 之间的区别。在我看来,当一个事件被添加到 event_base 并且事件还没有发生时,它就处于 pending
我想知道是否有关于如何编译 libev-dev 的说明在 Linux (CentOS) 64 位上。我找不到与 libev 相关的开发包,也找不到任何有关其编译的教程。p.s:请不要使用包管理器 -
我想知道是否有关于如何编译 libev-dev 的说明在 Linux (CentOS) 64 位上。我找不到与 libev 相关的开发包,也找不到任何有关其编译的教程。p.s:请不要使用包管理器 -
我正在学习 libev 并且偶然发现了这个问题。假设我想尽快处理某些事情,但不是现在(即不在当前执行函数中)。例如,我想将一些大型同步作业分成多个部分,这些部分将排队,以便其他回调可以在两者之间触发。
我有干净的centos6系统,尝试从源代码编译tor。第一种方式(通过 yum 安装 libevent)。我愿意: yum install libevent2 yum install libevent
我在代码中有结构指针 struct evkeyvalq *headers; 现在我调用一个函数,该函数将在结构中填充一些信息。 evhttp_parse_query(uri, headers) 我在这
Rant:我真的不喜欢 boost::asio,所以我一直在寻找替代方案并遇到了 libev。这对我来说似乎很简单,但正在做一些我无法理解的事情。如果一个线程中的问题太多,请告诉我。 1) 我将监听套
如果我们主要想要一个基于 epoll 的文件描述符循环,那么 libevent 还提供什么功能(对 http 或dns 东西)?? 我知道这是一个很大的项目,但对我来说编写一个 epoll 包装器 A
我在我的 Linux 'c' 应用程序中将 libev 用于计时器和 io 事件,我想将自定义数据与事件相关联。在 libev 文档中,它暗示了 associating custom data但没有给
在 C 中使用 libev 创建小型网络服务器时,在不阻塞 react 器的情况下提供文件服务(打开、就绪、写入套接字)的最佳策略是什么? 我有一些建议一次阅读几个区 block ,但我不确定这是正确
我是一名优秀的程序员,十分优秀!