【发布时间】:2012-10-25 14:39:29
【问题描述】:
我有点迷失在图书馆的结构中,我不得不将它们纠缠在一起。我需要帮助才能在这个结构中引入一些计时器。
我有以下:
-
com.cpp 其中有
main并包含 com.hpp - com.hpp 包含一个 host.h 并且需要的 boost 包含并定义了一个类 comClient
- host.c 包含 host.h
- wrapper.cpp 包含 com.hpp 和一些需要的提升包括
现在,我的 com.cpp 正在创建一个 comClient 并将其用于 com 端口上的异步通信。使用boost::asio::serial_port 和boost::asio::io_service。
我需要使用一些计时器,以便捕捉数据包传输时间过长。
当创建comClient的实例时,paket-timer应该被初始化。
在comClient的私有函数中使用asynch_read_some,我调用comClient的私有handler,然后这个handler调用host.c,它调用 wrapper.cpp 一个函数来重新启动计时器。
这是初始化定时器的函数:
//wrapper.cpp
void IniPacketTimer(void *pCHandle){
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::milliseconds(25));
t.async_wait(&hostOnTimeout(pCHandle));
io.run();
}
这就是简单的命令链:
//comClient.cpp
main{
comClient cc();
}
//comClient.hpp
class comClient(boost::asio::io_service& io_service){
comClient(){
hostInit();
aread();
}
private:
aread( call aread_done)
areaddone(call hostNewData())
}
//host.c
hostInit(){
IniPacketTimer()
}
hostNewData(){
resetTimer
}
//wrapper.cpp
resetTimer(){
t.expires_from_now
}
问题:
如何提供一个异步定时器,不影响我的串口的异步读/写操作,但在到达deadline时触发函数的执行?
我应该使用已经存在的io_service 还是可以,如果我只是创建另一个?
为什么我会收到错误 C2102 '&' expects L-Value for my line t.async_wait?
【问题讨论】:
标签: c++ boost timer boost-asio