此文主要记录IPC项目中如何运用循环队列来处理多则消息的。
(网络摄像头以下简称IPC)
在项目中,经常会有网络消息处理。现在的安防摄像头很多,通常也会配套一个APP去控制IPC,比如设置移动检测、人脸识别、婴儿哭识别等等。在APP点击一个button,可能会触发APP通过网络发送几则消息给摄像头。这个时候,IPC需要处理这几则或者十几则消息。如果,IPC处理消息不是并发的,那么就需要不断接收,不断处理。这时候,运用队列的机制,可以让先接收到的消息先处理。而后接收的消息则等待,典型的先进先出原则。如果IPC处理消息是并发的,同样也可以运用队列的机制,只不过需要在每次访问队列的时候加上锁机制来同步资源。IPC接收到的消息可能会包含APP用户ID、请求的命令、消息的长度等。
那如何处理这些消息呢?大致思路如下:
我们可以把每一则消息带有的信息放到结构体里面。这样,每个结构体就是队列的一个成员。接收消息的线程把消息包装成一个结构体然后在队列(数组)的尾部加上,处理消息的线程取出队列的头部来解析处理,每次解析处理完一则消息,就把消息从队列的头部移除。所以,我们要定义一个结构体数组,结构体里面还能包含结构体等,只要项目需要,都可以拓展。
程序模板比较简单,关键是知道怎么运用到项目中。
其中需要注意的点是循环队列如何判断空还是满。假设循环队列长度为5,当头指针和尾指针指向同一个地方,我们设为空。当有元素入队,尾指针指向下一个元素,当有元素出队,头指针指向下一个元素。当指向的元素为5时,下一个元素为0。这样ÿ