我想要实现的目标如下:
在接收模式下运行无线电并检查传入的包。一旦第二个Id像定时器中断一样执行并将无线电切换到发送模式以发送包然后返回到接收模式。
现在我有以下代码:
int main(int argc, char** argv)
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
t.async_wait(boost::bind(sendSyncToDevices, boost::asio::placeholders::error, &t));
io.run();
}
void sendSyncToDevices(const boost::system::error_code& ,
boost::asio::deadline_timer* t)
{
DoSomething();
t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
t->async_wait(boost::bind(sendSyncToDevices, boost::asio::placeholders::error, t));
}
然而io.run()是一个阻塞调用。有人可以建议我如何添加额外的while(1)循环来检查收音机上的传入消息吗?
谢谢!
答案 0 :(得分:2)
您可以在类似的帖子中得到答案
How do I perform a nonblocking read using asio?
他们讨论了一种使读/写调用无阻塞的方法。
或者,
对应用程序代码执行while(1)可能不是等待事件或I / O的最佳方式。您还可以在这些文件描述符上使用select()尝试轮询样式(更多是C风格编程)。 Select()本身就是一个poll()函数,它比while(1)和反复读取文件要好得多。
希望这有帮助。