从boost deadline_timer的处理程序访问类数据
Access to class data from handler for boost deadline_timer
我能够为boost deadline_time(它是一个成员)创建一个处理程序通过将其声明为静态。不幸的是,这阻止了对非静态成员数据的访问。
我有一系列的暂停。所以我的想法是有一个单独的时间表同时维护超时事件的有序列表。每次发生下一个超时事件时,类将使用类中的下一个超时事件重新触发计时器计算此超时事件的剩余时间。
为了使这个概念发挥作用,处理程序需要操作非静态数据。但这是不可能的sence boost::asio需要一个静态处理程序。
有人知道怎么处理吗?
class TimerController {
public:
void setTimer(const eibaddr_t gad, const timesecs_t timedelay);
void cancelTimer(const eibaddr_t gad);
bool isRunning(const eibaddr_t gad);
void setGad(const eibaddr_t gad);
static void timerHandler(const boost::system::error_code &ec);
private:
boost::asio::deadline_timer* m_pTimer;
struct timerList_s
{
eibaddr_t gad;
boost::posix_time::ptime absTimeOut;
timerList_s(const timerList_s& elem) : gad(elem.gad),
absTimeOut(elem.absTimeOut)
{
};
timerList_s(const eibaddr_t& pgad, const boost::posix_time::ptime pato)
: gad(pgad),
absTimeOut(pato)
{
};
timerList_s& operator= (const timerList_s& elem)
{
gad = elem.gad;
absTimeOut = elem.absTimeOut;
return *this;
};
bool operator< (const timerList_s& elem) const
{
return (absTimeOut < elem.absTimeOut);
};
bool operator== (const timerList_s& elem) const
{
return (gad == elem.gad);
};
};
std::list<timerList_s> m_timers;
使用boost::bind
可以按照以下方式deadline_.async_wait(bind(&client::check_deadline, this));
将deadline_timer
类与非静态数据一起使用。例如,ASIO的示例中提供了详细信息,请点击此处。
我有一系列的暂停。所以我的想法是deadline_timer,同时维护超时事件的有序列表。每次发生下一个超时事件时,类都会使用类中的下一个超时事件重新触发计时器计算此超时事件的剩余时间。
这是一个非常奇怪的设计。
为了使这个概念发挥作用,处理程序需要操作非静态数据。但这是不可能的:asio需要静态处理程序。
boost::asio不需要静态处理程序,请参阅文档。它需要一个具有签名的处理程序
void handler(
const boost::system::error_code& error // Result of operation.
);
这里的典型方法是使用boost::bind
将成员函数绑定到处理程序。异步TCP客户端示例显示了一种方法。asio库的作者有一篇优秀的博客文章详细描述了这个概念,如果你理解它有困难的话。
相关文章:
- 从终止处理程序访问所有未捕获的异常
- 如何从桌面应用程序访问嵌入式ArangoDB
- 如何从Qt应用程序访问UWP API
- 从测试程序访问共享库中具有静态私有字段的类
- Google Play Games C++API-无法通过程序访问好友
- 如何将功能和数据从一个涡轮C 程序访问到另一个涡轮增压程序
- 通过现有设备驱动程序访问设备
- 从用户应用程序访问环0模式(以及Borland允许这样做的原因)
- 从服务应用程序访问访客帐户系统注册表
- 如何使用FastCGI C/C 应用程序访问POST请求的主体
- 从 C 程序访问 dtrace 探测器
- 从C++程序访问 java 程序当前运行的 javabean
- 多个应用程序访问的单个进程
- 如何从调用程序访问 DLL 的变量?
- C++迭代程序访问下一个元素进行比较
- 从C程序访问C++函数时,收到错误消息"Access violation reading location"
- 如何从作为服务运行的c++程序访问当前登录的用户信息
- 从boost deadline_timer的处理程序访问类数据
- 是否可以同时从Python脚本和C++程序访问GPIO引脚
- 是否可以让两个c++程序访问同一个内存位置