智慧型家居 Linux系統的多執行緒心得

2021-10-12 16:29:17 字數 1251 閱讀 5521

該專案**未開源,很可能對您起不到幫助。。。

檔案描述符就不用講了吧(以下統稱"fd"),對linux系統有些許了解的小夥伴們都知道這個東東吧,樹莓派在接受、讀取、傳送某些資料的時候都要用到它!

在呼叫某些函式後,返回的fd是乙個整數(檔案描述符陣列的下標)。

當乙個fd產生的時候,用完了要記得及時關閉掉!!,尤其是放在全域性變數下的fd,不然的話,你會發現fd的值會逐級遞增,直到達到檔案描述符陣列的最大值(linux系統下,fd> 255 的時候就會超邊界了)!這時,這時候你會發現程式雖然沒有退出,但是已經不能正常讀取數值了。。。

多執行緒是個好東西,可以讓乙個程式同時實現多個功能。但是,使用多執行緒的時候一定要小心小心再小心!!!搞不好就要翻車…特別是多執行緒用到fd的時候。

在開發智慧型家居的時候,乙個c程式可能要同時實現很多功能,比如:控制io引腳的輸入/輸出、讀取其他節點發來的資訊(arduino板子發來的感測器的資料)、接受後端發來的控制指令、資料處理後統一發給伺服器等…那麼就要用到多執行緒了,多執行緒用的好,玩什麼都爽!(但我就是乙個菜狗…)

程式執行的時候我發現,即便呼叫close(fd)函式,fd的值還是會一直++,執行時間久了程式執行就出了問題,這個問題我除錯了很久(搞了快乙個下午的時間)

原因是我在socket執行緒裡又把乙個讀取資訊的功能函式以執行緒的方式執行了,而且用的是全域性fd變數,導致fd的值怎麼都是遞增的(執行緒裡套執行緒,自己腦部一下就知道有多可怕,大牛級別的程式設計師除外…)

除錯了半天,把思路理清楚後,發現根本沒必要把那個函式放進執行緒裡。

如圖:紅框是出現問題的地方,我當時還傻著臉讓fd重置。。。

箭頭位置是正確的寫法,該正好,系統完美執行!!!執行再長的時間都不會出現fd出界的問題。

1、使用多執行緒的時候,如果沒有必要,盡量不要執行緒裡面套執行緒。

2、注意fd的值,用完及時close(fd);掉,不要超邊界。

現在智慧型家居系統

在現在的智慧型家居系統中,基本包含以下幾個方面 1 家庭安防 2 可視對講或對講 3 火災預防 4 緊急求助 5 遠端抄表 6 家庭綜合資訊 7 遠端監控 8 資訊家電 9 家庭自動控制 以上1 7都有成熟的產品 第8項也有大的家電和it廠商在做,不過推廣並不理想 而第9項,現在的市場基本是 百花齊...

智慧型家居實訓第四天 多執行緒

執行緒 在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。1.執行緒的建立 pthread create include int pthread create pthread t thread,const pthread attr t attr,void start routine voi...

實現智慧型家居控制系統

stm32f103r6 微控制器 lcd12864 液晶顯示屏 dht11 溫濕度感測器 retch 光敏電阻 fan dc 直流風扇 buzzer 蜂鳴器 電阻 按鍵等 有兩種控制模式,分別是預設的智慧型控制模式和手動控制模式,按下按鍵mode可切換控制模式 智慧型控制模式中溫濕度感測器實時監測當...