我正在尝试使用来自
的代码与arduino进行通信http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/
使用termios打开并以非阻塞方式与arduino交谈,工作正常。我想知道的是当使用rxtx在Java上我可以注册一个回调函数,当线路上有数据时调用该函数,这样我就不必手动检查了。我用Google搜索但无法找到有关如何注册回调函数的任何信息?
我在Linux / OS X上,我试图避免启动新线程只是为了观察/读取该行的数据。
答案 0 :(得分:1)
Posix本身没有定义一种方法来分配串行数据到达时要调用的回调函数。如果您不想使用单独的线程,执行此类处理的标准方法是使用select
库函数。这允许您编程定义程序感兴趣的一组文件描述符,然后进入休眠状态。如果您声明对其中一个文件描述符感兴趣(例如新数据可供读取),则Select将自动唤醒您的进程。这避免了必须忙于等待并轮询多个描述符以进行活动。
另一种选择是使用像libevent这样的库,它位于Posix层之上并提供回调基础设施。 http://monkey.org/~provos/libevent/
答案 1 :(得分:1)
Boost.Asio可以提供回调功能。它在Linux和Mac OS X上运行。