基於視訊的電熔鎂爐工況識別系統→6.電熔鎂爐伺服器設計
阿新 • • 發佈:2018-11-11
《基於視訊的電熔鎂爐工況識別系統→6.電熔鎂爐伺服器設計》
程式目的 總結
Show 執行結果
程式目的 總結
- 主執行緒
- 當有新的客戶端連線時
- 顯示工況資料表
- 讀取資料庫工況資料
- 啟動子執行緒1thread,使能子執行緒1處理函式isStop= false
- 主執行緒發出訊號startThread,用於啟動子執行緒1中處理函式VideoThread::myVideoPlay來讀取資料
- 繪製需量趨勢圖
- 啟動繪圖子執行緒2,此時並沒有啟動子執行緒2中處理函式,啟動子執行緒2的處理函式的觸發訊號在子執行緒1中
- 子執行緒1的處理:
- 當接收到工況資料訊號mySignal(data)
- 在dealSignal槽函式中:
- 顯示奇數幀視訊圖片
- 傳輸資料到客戶端
- 在訊息滾動中播放工況狀態
- 通過playStopFlag來控制全部資料處理完後的操作
- 子執行緒2的處理:
- 當接收到影象資料訊號updateImage(image)時,使用getImage槽函式接收一張座標x軸為11個時間單點陣圖片
- 在getImage槽函式中,將圖片顯示到主介面中
- 斷開連線按鈕:
- 關閉子執行緒
- 主動和客戶端斷開連線
- 其他按鈕:暫停、繼續;加速、減速;
- 在子執行緒1處理函式VideoThread::myVideoPlay中
- 讀取一條工況資料,組包為data,發出mySignal(data)訊號
- 每25幀獲取需量資料到demmandTre陣列中一次,每隔11s即11個25幀傳送一次繪圖訊號paintSignal(i),用於啟動執行緒2中處理函式VoltTreThread::myVoltPaint來繪製圖像
- 其他:
- 使用sleepSpeed控制視訊播放速度,預設為80,即80ms傳輸一次資料訊號mySignal(data)
- 由於顯示奇數幀視訊圖片,因此相當於40ms顯示1幀,1s顯示25幀原視訊幀率
- 在子執行緒2處理函式VoltTreThread::myVoltPaint(int sec)中
- 每隔11s繪製一張曲線圖,併發出updateImage(image)訊號
- 如果void Widget::dealSignal(QString data)中不新增
那麼在點選斷開連線時程式會出錯,因為 斷開連線後tcpSocket==NULL,但是子執行緒1還沒完全關閉,還會發送工況資料訊號mySignal(data)觸發dealSignal槽函式,此時針對tcpSocket的write操作會使程式崩潰(2.173)
1 2 3 4 if(tcpSocket==NULL) { return; }
- release下繼續播放按鈕失效,但debug狀態下有反應
- 因此在debug模式釋出程式
- 在debug模式釋出程式也是可以的,按照需要手動新增模組就行 參考見Qt補充→新增資原始檔以及釋出程式
FMP Server.pro
|
main.cpp
|
---|
widget.h
|
widget.cpp
|
||||
videothread.h
|
videothread.cpp
|
||||
volttrethread.h
|
volttrethread.cpp
|
Show 執行結果
- 下圖是執行後的介面
- 當有客戶端連線時,會播放視訊,顯示工況資料表、需量趨勢圖