在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

循環(huán)隊(duì)列在網(wǎng)絡(luò)攝像頭項(xiàng)目中處理多則消息的運(yùn)用

STM32嵌入式開發(fā) ? 來(lái)源:CSDN-云英 ? 2023-06-25 14:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

此文主要記錄IPC項(xiàng)目中如何運(yùn)用循環(huán)隊(duì)列來(lái)處理多則消息的,網(wǎng)絡(luò)攝像頭下文簡(jiǎn)稱IPC。

在項(xiàng)目中,經(jīng)常會(huì)有網(wǎng)絡(luò)消息處理?,F(xiàn)在的安防攝像頭很多,通常也會(huì)配套一個(gè)APP去控制IPC,比如設(shè)置移動(dòng)檢測(cè)、人臉識(shí)別、嬰兒哭識(shí)別等等。在APP點(diǎn)擊一個(gè)button,可能會(huì)觸發(fā)APP通過(guò)網(wǎng)絡(luò)發(fā)送幾則消息給攝像頭。

這個(gè)時(shí)候,IPC需要處理這幾則或者十幾則消息。如果,IPC處理消息不是并發(fā)的,那么就需要不斷接收,不斷處理。這時(shí)候,運(yùn)用隊(duì)列的機(jī)制,可以讓先接收到的消息先處理。

而后接收的消息則等待,典型的先進(jìn)先出原則。如果IPC處理消息是并發(fā)的,同樣也可以運(yùn)用隊(duì)列的機(jī)制,只不過(guò)需要在每次訪問(wèn)隊(duì)列的時(shí)候加上鎖機(jī)制來(lái)同步資源。

IPC接收到的消息可能會(huì)包含APP用戶ID、請(qǐng)求的命令、消息的長(zhǎng)度等。

那如何處理這些消息呢?大致思路如下:

我們可以把每一則消息帶有的信息放到結(jié)構(gòu)體里面。這樣,每個(gè)結(jié)構(gòu)體就是隊(duì)列的一個(gè)成員。接收消息的線程把消息包裝成一個(gè)結(jié)構(gòu)體然后在隊(duì)列(數(shù)組)的尾部加上,處理消息的線程取出隊(duì)列的頭部來(lái)解析處理,每次解析處理完一則消息,就把消息從隊(duì)列的頭部移除。

所以,我們要定義一個(gè)結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體里面還能包含結(jié)構(gòu)體等,只要項(xiàng)目需要,都可以拓展。

程序模板比較簡(jiǎn)單,關(guān)鍵是知道怎么運(yùn)用到項(xiàng)目中。

其中需要注意的點(diǎn)是循環(huán)隊(duì)列如何判斷空還是滿。假設(shè)循環(huán)隊(duì)列長(zhǎng)度為5,當(dāng)頭指針和尾指針指向同一個(gè)地方,我們?cè)O(shè)為空。當(dāng)有元素入隊(duì),尾指針指向下一個(gè)元素,當(dāng)有元素出隊(duì),頭指針指向下一個(gè)元素。當(dāng)指向的元素為5時(shí),下一個(gè)元素為0。

這樣,得出的結(jié)論是,當(dāng)隊(duì)列為滿時(shí),頭指針和尾指針是相等的,這和隊(duì)列為空的時(shí)候是一樣的。不信,畫畫圖看看。

那怎么處理呢?

為了區(qū)別空隊(duì)列和滿隊(duì)列,數(shù)組多加一個(gè)元素,這個(gè)元素是不確定的,是可以移動(dòng)的,它將保證當(dāng)隊(duì)列為滿時(shí),還空留了一個(gè)位置。說(shuō)起來(lái)比較抽象,看以下代碼:

wKgZomSX4dGAO2wbAAAICr4CJzA278.png

上面的函數(shù)是判斷隊(duì)列是否為滿。這樣和隊(duì)列是否為空的判斷方法不一樣:

wKgaomSX4dGAfHt6AAAG7mO7GRM444.png

所以,通過(guò)在循環(huán)數(shù)組中加多了一個(gè)元素,就能夠區(qū)分隊(duì)列是空的還是滿的。

大致的模板如下:

#include 
#include 


//構(gòu)造不完全填滿循環(huán)數(shù)組,以便區(qū)分隊(duì)列為空還是滿。
#define QUEUE_LEN  16
#define ARRAR_SIZE  (QUEUE_LEN + 1)
typedef struct student
{
   int       math;
   int       English;
   char      name[32];
} student;
#define QUEUE_TYPE  student


typedef enum BOOL_
{
    false = 0,
    true  = 1,
}bool;


//static使全局變量只在本文件中使用 
static student  studentTable[ARRAR_SIZE];//定義結(jié)構(gòu)體數(shù)組
static unsigned int front; //指向隊(duì)頭元素 
static unsigned int tail;  //指向隊(duì)尾元素的下一個(gè) 


bool IsQueueEmpty(void)
{
    return (front == tail);
}


bool IsQueueFull()
{
    return ((tail + 1) % ARRAR_SIZE == front);
}


bool queueInsert(QUEUE_TYPE value)
{
    if(IsQueueFull())
        return false;
    studentTable[tail] = value;
    tail = (tail + 1) % ARRAR_SIZE;
    return true;
}


bool queueDelete()
{
    if(IsQueueEmpty())
        return false;
    front = (front + 1) % ARRAR_SIZE;
    return true;
}
//測(cè)試程序
int main(int argc, char *argv[])
{
    student stu;
    stu.math = 99;
    stu.English = 98;
    char name[32]= "xiaoming";
    memcpy(stu.name,name,sizeof(name));
    queueInsert(stu);
    stu.math = 61;
    stu.English = 60;
    memset(name,0,sizeof(name));
    sprintf(name,"xiaohong",sizeof(name));
    memcpy(stu.name,name,sizeof(name));
    queueInsert(stu);
    printf("front = %d,tail = %d,name = %s
",front,tail,studentTable[front].name);
    queueDelete();
    printf("front = %d,tail = %d,name = %s
",front,tail,studentTable[front].name);
    return 0;
}
測(cè)試結(jié)果如下:
3d2a3b16-11a5-11ee-962d-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 攝像頭
    +關(guān)注

    關(guān)注

    61

    文章

    4968

    瀏覽量

    98101
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7802

    瀏覽量

    90700
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71125
  • IPC
    IPC
    +關(guān)注

    關(guān)注

    3

    文章

    365

    瀏覽量

    53059
  • 隊(duì)列
    +關(guān)注

    關(guān)注

    1

    文章

    46

    瀏覽量

    11068

原文標(biāo)題:循環(huán)隊(duì)列在網(wǎng)絡(luò)攝像頭項(xiàng)目中,處理多則消息的運(yùn)用

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    低功耗無(wú)線攝像頭項(xiàng)目合作

    現(xiàn)在有一個(gè)項(xiàng)目外包,低功耗無(wú)線攝像頭,使用鋰電池供電,需要支持BLE喚醒拍照,支持一年待機(jī)。 有經(jīng)驗(yàn)的請(qǐng)聯(lián)系我。
    發(fā)表于 01-18 19:01

    0V7670攝像頭項(xiàng)目資料示例代碼、參考手冊(cè)等下載

    0V7670攝像頭項(xiàng)目資料示例代碼、參考手冊(cè)等,推薦下載!
    發(fā)表于 05-29 21:54

    網(wǎng)絡(luò)攝像頭監(jiān)控的系統(tǒng)優(yōu)勢(shì)

     網(wǎng)絡(luò)攝像頭除了能在世界的任何一個(gè)角落通過(guò)Internet進(jìn)行遠(yuǎn)端監(jiān)控之外,通過(guò)網(wǎng)絡(luò)監(jiān)控也可以有效地降低成本,它的"即插即用"功能,無(wú)須像模擬攝像機(jī)一樣必須安裝同軸電纜。只要利用
    發(fā)表于 03-25 15:26

    基于labview的攝像頭幀錄像機(jī)

    該示例使用一個(gè)生產(chǎn)者消費(fèi)者結(jié)構(gòu)。生產(chǎn)環(huán)路產(chǎn)生的網(wǎng)絡(luò)攝像頭圖像和時(shí)間戳記,然后送入隊(duì)列。由于數(shù)據(jù)從攝像頭的圖像,它是一個(gè)引用的內(nèi)存位置,我需要確保在隊(duì)
    發(fā)表于 12-13 16:22

    LabVIEW獲取網(wǎng)絡(luò)攝像頭方法

    一個(gè)改裝過(guò)的無(wú)線路由器,通過(guò)刷機(jī),將路由器中加載網(wǎng)絡(luò)攝像頭驅(qū)動(dòng),這樣就可以將視頻發(fā)布出去了,當(dāng)然你的電腦必須有WIFI功能。建議新手直接購(gòu)買成品,因?yàn)橛行┠K需要修改硬件電路,至于在哪購(gòu)買,請(qǐng)自行淘寶
    發(fā)表于 04-14 23:36

    Labview隊(duì)列計(jì)時(shí)和隊(duì)列使用循環(huán)處理

    大家可以看看,Labview隊(duì)列計(jì)時(shí)和隊(duì)列使用循環(huán)處理
    發(fā)表于 05-16 09:59

    【OK210申請(qǐng)】簡(jiǎn)易攝像頭監(jiān)控系統(tǒng)

    ,之前用過(guò)一款,很喜歡。項(xiàng)目描述:項(xiàng)目就是做一個(gè)簡(jiǎn)易攝像頭監(jiān)控系統(tǒng),其功能主要類似于小區(qū)攝像頭監(jiān)控的系統(tǒng),在實(shí)現(xiàn)基本功能之后,希望能對(duì)小區(qū)的監(jiān)控系統(tǒng)進(jìn)行優(yōu)化。更可以將其
    發(fā)表于 07-26 09:55

    【TL6748 DSP申請(qǐng)】指紋圖像處理項(xiàng)目、攝像頭視頻還原項(xiàng)目、音頻算法研究項(xiàng)目

    申請(qǐng)理由:指紋圖像處理項(xiàng)目攝像頭視頻還原項(xiàng)目、音頻算法研究項(xiàng)目項(xiàng)目描述:指紋圖像
    發(fā)表于 09-10 11:16

    labview調(diào)用網(wǎng)絡(luò)攝像頭時(shí)崩潰

    首先,我可以調(diào)用筆記本自帶的攝像頭。我的網(wǎng)絡(luò)攝像頭使用網(wǎng)線與電腦連接(項(xiàng)目需要用網(wǎng)線),剛開始連上之后max不識(shí)別,后來(lái)網(wǎng)上查資料,說(shuō)是要設(shè)置成本地
    發(fā)表于 03-12 15:14

    隊(duì)列循環(huán)發(fā)送

    請(qǐng)問(wèn)運(yùn)用隊(duì)列事件結(jié)構(gòu),如何實(shí)現(xiàn)點(diǎn)擊一次按鍵循環(huán)發(fā)送呢
    發(fā)表于 10-17 11:00

    開發(fā)一套基于人檢測(cè)AI的網(wǎng)絡(luò)攝像頭

    人則將圖片數(shù)據(jù)自動(dòng)上傳網(wǎng)絡(luò)并報(bào)警。硬件部分ART-PI開發(fā)版,OV2640攝像頭,紅外接收頭與遙控器軟件部分RT-THREAD操作系統(tǒng),圖像處理,AI模型的C語(yǔ)言應(yīng)用,紅外遙控部分,網(wǎng)絡(luò)
    發(fā)表于 02-16 07:26

    IP網(wǎng)絡(luò)攝像頭解決方案

    IP網(wǎng)絡(luò)攝像頭解決方案 視頻監(jiān)控領(lǐng)域正向 IP 網(wǎng)絡(luò)進(jìn)行技術(shù)過(guò)渡??蓪?IP 網(wǎng)絡(luò)攝像系統(tǒng)定義為網(wǎng)絡(luò)
    發(fā)表于 07-29 08:41 ?4227次閱讀
    IP<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>攝像頭</b>解決方案

    利用C++提供的隊(duì)列封裝一個(gè)消息隊(duì)列

    最近的C++項(xiàng)目中,需要用到消息隊(duì)列,但是C++中又沒(méi)有原生的消息隊(duì)列,就在網(wǎng)上找了一下相關(guān)資料,利用C++提供的隊(duì)列,自己封裝一個(gè)消息
    的頭像 發(fā)表于 05-20 15:16 ?2278次閱讀
    利用C++提供的<b class='flag-5'>隊(duì)列</b>封裝一個(gè)消息<b class='flag-5'>隊(duì)列</b>

    如何使用ping命令測(cè)試網(wǎng)絡(luò)攝像頭連通性

    在做智能化弱電項(xiàng)目時(shí),前端攝像頭設(shè)備安裝結(jié)束后,我們會(huì)對(duì)網(wǎng)絡(luò)攝像頭進(jìn)行調(diào)試,調(diào)試過(guò)程中會(huì)遇到前端攝像頭沒(méi)有圖像或者圖像出來(lái)了畫面卡頓的現(xiàn)象。
    的頭像 發(fā)表于 08-19 09:48 ?1.3w次閱讀
    如何使用ping命令測(cè)試<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>攝像頭</b>連通性

    展頻IC在攝像頭上的運(yùn)用

    展頻IC在攝像頭上的運(yùn)用
    發(fā)表于 04-14 10:12 ?1次下載
    主站蜘蛛池模板: 在线黄色网 | 久久精品乱子伦观看 | 操女人免费视频 | 国产亚洲一区二区三区啪 | 国产巨大bbbb天美 | 日本三级香港三级人妇 m | 久久精品视频7 | 国产精品美女一区二区三区 | 亚洲先锋资源 | 婷婷六月激情 | 日本xxxx色视频在线观看免费 | 国产亚洲欧美一区 | 中文一级黄色片 | 久热精品视频 | 天堂在线www网亚洲 天堂在线观看 | 日色视频| 亚洲综合成人在线 | 国产成年网站v片在线观看 国产成人91青青草原精品 | 成人xx视频免费观看 | 老逼影院| 波多野结衣50连精喷在线 | 欧美三级免费网站 | 欧美一级特黄啪啪片免费看 | 亚洲偷自偷白图片 | 国产一级特黄aa级特黄裸毛片 | 狠狠干2021 | 在线免费视频观看 | 五月天免费在线播放 | 最近免费| 国产视频国产 | 女性一级全黄生活片在线播放 | 国产美女在线免费观看 | 日本三级最新中文字幕电影 | 天堂资源网| 亚洲午夜久久久久久噜噜噜 | 五月婷婷在线视频观看 | 在线激情网 | 国产jlzzjlzz视频免费 | 大尺度免费高清在线观看视频 | 黄色福利视频网站 | 夜夜操com |