我有点迷失在图书馆的建设中,我不得不纠缠在一起。我需要帮助来介绍一些定时器到这个构造中。如何在此环境中设置deadline_timer?
我有以下:
- com.cpp具有
main
并且包括com.hpp - com.hpp其包括host.h,需要升压包括并定义了一个类comClient
- host.c与包括host.h
- wrapper.cpp与包括com.hpp和一些必要的升压包括
现在,我com.cpp是创建一个comClient和用途它用于com端口上的异步通信。使用boost::asio::serial_port
和boost::asio::io_service
。
我需要与一些计时器一起工作,以便在传感器需要太长时间时才能发现。
当创建comClient的实例时,应该初始化参数计时器。
在私有函数使用asynch_read_some
comClient,我叫comClient的私人处理,那么这个处理程序调用host.c,这就要求对wrapper.cpp一个函数的函数重新启动计时器。
这是给init定时器功能:
//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
}
问题:
我如何提供异步定时器,它不会影响串行端口上的异步读/写操作,但会在截止时间为h时触发函数的执行它?
我应该使用已有的io_service
还是没关系,如果我只是创建另一个?
为什么我得到一个错误C2102'&'预计我的行的L值为t.async_wait
?
我很抱歉,如果问题仍然有些不清楚。有很多代码。我希望你们给出一个例子,这个例子似乎有相当多的部分。现在我可以学习并适应它。这将需要一点 - 但非常感谢这个代码! – Jook
嘿,谢谢你和其他一些职位,我终于让我的计时器有点工作 - 只是不像预期的那样。这是我的后续问题:http://stackoverflow.com/questions/13089110/lost-in-threads-how-can-i-extend-this-example-correctly。再次感谢你的帮助。 – Jook