如何编写一个主循环(在 C for Linux 系统中)在等待来自多个源的消息时阻塞,例如
a)一个 nanomsg 套接字和串行端口,或
b)一个 nanomsg 套接字和 Netlink 套接字?
从哪儿开始?
我想我可以轮询 nanomsg 套接字,然后轮询串行端口,然后休眠例如 0.1 秒,但如果可能的话,这是我想避免的模式。
如何编写一个主循环(在 C for Linux 系统中)在等待来自多个源的消息时阻塞,例如
a)一个 nanomsg 套接字和串行端口,或
b)一个 nanomsg 套接字和 Netlink 套接字?
从哪儿开始?
我想我可以轮询 nanomsg 套接字,然后轮询串行端口,然后休眠例如 0.1 秒,但如果可能的话,这是我想避免的模式。
如果上面发布的方法是您不想采用的方式,那么可以这样做:
1)
用一个自治的串口扫描器实例化一个线程,为这个线程配备一个PAIR/PAIR
或PUSH/PULL
(从端口扫描器线程端观察到)与主线程的连接,最好使用零开销或低开销的传输类〜inproc://
或ipc://
(tcp://
传输-类只是花费太多开销来传递线程间信号/消息传递)。只要您觉得合适,请让此扫描器线程通过此上行链路将您需要的任何内容发送到主线程。
2)使用自治的nanomsg
-scanner
实例化一个线程,为该线程配备一个or (从套接字扫描线程方面观察到)与主线程的连接,最好使用零开销或低开销传输类 ~ or 。只要您觉得合适,请让此扫描器线程通过此上行链路将您需要的任何内容发送到主线程。PAIR/PAIR
PUSH/PULL
inproc://
ipc://
3)按照 1) 和 2) 中的决定,
配备main()
两个相应的交易对手(2x PAIR
-s 或 2x PULL
-s),并保持这个线程间信令/消息传递平面基础设施的正常运行。
4 )
享受对 a in 的微不足道的阻塞调用的“舒适”.poll()
main(){...}
,正如您在上面所希望的,而我专业地提倡使用非阻塞代码,总是......但也承认,但不尊重,您在上面表达的愿望在不确定的长时间等待解锁事件期间放松自己的代码控制 - 如果它来了)
5 )
给定 a.poll()
已收到一些消息,aRetCODE = nn_recv( aS, &B, aBsz, NN_DONTWAIT );
从任一扫描仪线程读取相应的信号上行链路。
6)
循环。