0

我试图实现的是以下几点:

在接收模式下运行无线电并检查传入的包。每秒 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) 循环来检查收音机上的传入消息吗?

谢谢!

4

1 回答 1

2

您可能会在类似的帖子中得到答案

如何使用 asio 执行非阻塞读取?

他们讨论了一种使读/写调用非阻塞的方法。

或者,

在应用程序代码上执行 while(1) 可能不是等待事件或 I/O 的最佳方式。您还可以在这些文件描述符上使用 select() 尝试轮询样式(更多是 C 样式的编程)。Select() 本质上是一个 poll() 函数,它比使用 while(1) 并一次又一次地读取文件要好得多。

希望这可以帮助。

于 2013-09-26T18:45:06.813 回答