該專案**未開源,很可能對您起不到幫助。。。
檔案描述符就不用講了吧(以下統稱"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可切換控制模式 智慧型控制模式中溫濕度感測器實時監測當...