使用boost::asio::io_service运行避免繁忙循环
Avoiding busy loop with boost::asio::io_service run
我正在使用boost实现一些asio操作,我遇到了一个接口问题,我在初始化时没有收到"处理程序",但就在之后
这迫使我写一个"忙"循环,我想做的是即使没有至少一个处理程序也要运行io_service,这可能吗?处理这个问题的方法是什么?在服务上等待处理程序?这是我的密码。。
/** : */
void Run () { while(true) {m_srv.run(); Sleep(1);} } // once 1 handler is inside service, thread will not be in busy loop
private: // members:
io_service m_srv;
有什么建议吗?感谢
这就是代码问题:(m_drv是一个操作boost::thread(io_service::run..)的任务)
class App : public Base::Application
{
public:
/** : */
App(char* name, char* id) : Application(name, id), m_drv("NetTask"), m_worker("Worker"), m_acceptor(m_worker, Drv(), &OnAccept, 4567)
{
m_acceptor.Accept(Drv());
}
/** : */
inline DriverImp& Drv() { return static_cast<DriverImp&>(m_drv.Imp());}
/** : */
inline Reactor& Worker() { return m_worker; }
public:
APTR(Socket) m_sock;
private: // members:
Driver m_drv;
Reactor m_worker;
Acceptor m_acceptor;
};
您需要使用io_service::work:
boost::asio::io_service service;
boost::asio::io_service::work work( service );
注意:在析构函数中,work
对象通知service
工作已完成,io_service::run()
可能返回。
相关文章:
- 花括号使循环运行一次?
- 如何在这里循环运行?
- 作为无限循环运行
- 插入无限循环运行的单向链表
- 运行功能并保持循环运行C
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 在C 插入内部的手动循环运行不正确
- Windows 生物识别服务在调用 WinBioCaptureSample 时循环运行 SensorAdapterSta
- 为什么我的 do 循环运行多次并且不要求输入?
- 我希望循环运行直到数字为:123
- 如何在按键按下C 循环运行,但将其打破每个升降机
- 如何使用调整后的字符串索引第二次通过循环运行字符串
- 循环运行时错误
- 为什么这个循环运行不可见的代码?工作不正常
- 无法通过循环运行我的代码,但是手动复制和粘贴有效
- 程序以循环运行
- while 循环运行,无论输入是否正确
- C++ - 使用 cin 循环运行 while 后,程序不会再次接受输入
- 不停止While循环运行而未获得预期结果
- 如何向编译器提供有关循环运行最长时间的提示