性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

程序小白
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
【第三篇】嵌入式系統(tǒng)的事件驅(qū)動(dòng)型編程技術(shù)第二版(書籍分享)
【第四篇】QP量子編程之入門體驗(yàn)
【第五篇】從(狀態(tài)圖)到(代碼)生成,一切交給軟件QM
【第六篇】基于QP開發(fā)應(yīng)用程序的套路分享
【第七篇】哲學(xué)家就餐問(wèn)題的對(duì)象分解
【第八篇】QF框架之時(shí)間管理——定時(shí)事件
作者動(dòng)態(tài) 更多
基于stm32采用PWM驅(qū)動(dòng)伺服控制器學(xué)習(xí)筆記
05-13 15:25
基于STM32驅(qū)動(dòng)TM1638學(xué)習(xí)筆記——軟件篇
04-19 12:42
基于TM1638驅(qū)動(dòng)8位數(shù)碼管設(shè)計(jì)分享
02-24 11:26
RT-Thread驅(qū)動(dòng)之路: Studio創(chuàng)建FAL分區(qū)⑤
01-02 08:30
RT-Thread驅(qū)動(dòng)之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

【第七篇】哲學(xué)家就餐問(wèn)題的對(duì)象分解

      例子不是影響他人的主要素材,是唯一素材。 ————原書引用。

      這一篇主要以官方提供的哲學(xué)家就餐的例子,來(lái)引出順序圖、活動(dòng)對(duì)象、到整體的設(shè)計(jì)與應(yīng)用,一切從需求開始,一張圓形的桌子上圍坐了五個(gè)哲學(xué)家,圓桌上有一盆意大利面,在哲學(xué)家的兩側(cè)都有餐叉,哲學(xué)家的日常由思考和吃面組成,思考一段時(shí)間,餓了,然后吃面一段時(shí)間,然后再思考,但是有個(gè)問(wèn)題,就是面條太滑,如果想要吃面就得用兩把叉子,這個(gè)時(shí)候出現(xiàn)了一個(gè)問(wèn)題,當(dāng)一個(gè)吃面的時(shí)候,身邊的另外兩個(gè)人就不能同時(shí)吃面了,因?yàn)椴筒嬗邢蓿腥双@得了,身邊的人就只能等待,如圖:

     

      在這個(gè)例子中,我們很明顯能夠確認(rèn)的是,餐叉相當(dāng)于是一種資源相對(duì)于哲學(xué)家,基于上一篇,我們規(guī)則里面,一般情況下將這種共享的資源封裝在一個(gè)活動(dòng)對(duì)象內(nèi),統(tǒng)一管理,這里就有了第一個(gè)名為table的活動(dòng)對(duì)象,負(fù)責(zé)管理餐叉,因?yàn)椴筒娑际欠旁谧雷由系模云涿麨閠able。除了這個(gè)共享的資源以外,看一看誰(shuí)來(lái)申請(qǐng)餐叉,哲學(xué)家,同時(shí),他還有不同的狀態(tài),思考,饑餓,用餐等等。所以很符合狀態(tài)機(jī)的模式,于是將哲學(xué)家也封裝成活動(dòng)對(duì)象,整個(gè)應(yīng)用便是通過(guò)活動(dòng)對(duì)象之間的交互完成的。

      接下來(lái)需要分離出整個(gè)應(yīng)用當(dāng)中需要的事件信號(hào),這時(shí)候需要繪制順序圖,順序圖如下:

      這個(gè)圖很有意思,最左上是QF提供基礎(chǔ)的服務(wù)項(xiàng),往右都是我們定義的活動(dòng)對(duì)象,

從每個(gè)活動(dòng)對(duì)象垂直看下去,就是活動(dòng)對(duì)象在交互過(guò)程中的狀態(tài)轉(zhuǎn)換歷史,而帶箭頭的部分就是我們最需要的事件,從圖中可以看到箭頭上的說(shuō)明是事件的信號(hào),箭頭的方向是指示了事件的發(fā)送者到接收者。

      一般事件信號(hào)的定義和事件類型的定義都會(huì)放在一個(gè)公共的頭文件中,因?yàn)槭录怯脕?lái)交互的,他會(huì)涉及很多的活動(dòng)對(duì)象,所以共享是這些是必要的,例如我們的應(yīng)用中,事件信號(hào)的枚舉,事件結(jié)構(gòu)體的定義。這里都放在了dpp.h中:

除了這些內(nèi)容以外,共享的宏,以及構(gòu)造函數(shù)的聲明也要放到這個(gè)文件中,因?yàn)閙ain.c中要顯式的調(diào)用這些構(gòu)造函數(shù)。

      在main函數(shù)中,你需要給每個(gè)活動(dòng)對(duì)象創(chuàng)建一個(gè)事件隊(duì)列,給動(dòng)態(tài)申請(qǐng)的事件創(chuàng)建內(nèi)存池,給發(fā)行訂閱機(jī)制初始化隊(duì)列,如下:

       定義好了事件池以后,就要構(gòu)造活動(dòng)對(duì)象、初始化系統(tǒng)框架、初始化發(fā)行訂閱機(jī)制、初始化事件池、初始化板級(jí)資源,如下:

      

      接下來(lái),啟動(dòng)活動(dòng)對(duì)象,并把系統(tǒng)控制權(quán)交回給QF,如下:

      到這里我們的應(yīng)用也就真正的運(yùn)行起來(lái)了。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 6
收藏 6
關(guān)注 154
成為作者 賺取收益
全部留言
0/200
  • chaochao1545 2020-11-19 18:11
    ????????
    回復(fù)