我不确定如何处理我正在编写的程序中的异步任务,我希望有经验的人至少可以指出我正确的方向.
我在嵌入式ARM处理器上运行Angstrom Linux.我的程序通过暴露的硬件PWM和PTP上的摄像头控制多个伺服系统.此外,它是套接字守护程序,它从任意客户端(在此实例中为Android)中获取命令.相机PTP很慢,我不想等待它完成任务,因为程序的其余部分需要响应.
我已经尝试过线程,但相机线程中的任何问题似乎都会破坏整个过程.理想情况下,我想自己发送相机来做它的事情,当它完成时让主功能知道.这是一种合适的分叉技术还是我实施了不正确的线程?
另外,我想远离大型二级库,以避免我已经拥有的任何交叉编译问题.在此先感谢您的任何建议.
最佳答案
采取史蒂夫的答案的基本方法,但跳过init(8)和命名管道.
原文链接:/linux/441149.htmlfork()包含您的摄像头代码并通过常规管道或域套接字进行通信的子级.在父代码中为SIGCHLD编码信号处理程序.如果子代死,则使用wait()的返回代码查询原因.如果它自行死亡然后清理并重新启动它;如果它正常结束那么在这种情况下做适当的事情.通过最终选择的IPC与孩子沟通.这使您可以比init和域套接字或管道更多地控制子进程,特别是,与使用FIFO的时髦语义相比,它将使父进程和子进程之间的设置和通信变得更容易.
当然,如果相机代码确实存在问题,那么你所做的就是通过不取下整个程序来使故障更容易管理.理想情况下,如果在您的能力范围内,您应该让相机代码完美地工作.