紅星回轉窯所選擇的監控系統是一個多任務系統,其多任務的基本單元是線程。線程是可由系統調度的最少代碼量,也是程序運行的最基本單元。一個進程可由多個線程組成,可以共享進程的軟硬件資源而獨立運行。系統高層程序將cpu時間劃分為許多小時間片,并按一定的優先級把時間片分配給各個線程。各線程在各自的時間片內使用cpu,從而 了微觀上輪流執行工作任務,宏觀上 并發運行多任務的 。在通信程序中使用多線程,即創建專門的通信線程 對串口的訪問。會煮那要控制系統中的線程一旦被創建,將獨立于創建它的線程運行形式。利用該機制原理,主線程能夠通過全局標志 對通信線程的管理目的。
在回轉窯的監控系統中,由于下位機不僅接收紅外測溫儀傳送的數據,而且要根據上位機的要求發送所需的數據,比如水泥回轉窯計算機自動控制系統。由于下位機接收的通信請求往往是異步的、突發性的,而windows系統接收串口通信請求后,只是和通信緩沖區進行數據交換,并不產生相應消息通知用戶進程。所以經常造成對串口通信請求反映不及時,使數據緩沖區發生溢出,這樣造成通信過程長時間停滯和出錯,使得串行通信的不可靠。為了方便上下位機通信和提高系統的可靠性,在下位機建立兩個通信子線程,分別負責與上位機和紅外測溫儀的通信。
該系統通過引入多線程,充分利用了多任務的特點,可以有效克服串口通信中的停滯和反應不及時的缺點,并可以大大提高程序運行效率和可靠性。在實際運行中,當上位機要求發送數據和紅外測溫儀傳送數據同時發生時,即兩個線程的同時要求執行,經常會發生對共享資源(如溫度數據)的讀寫沖突。為了避免沖突,需要使這兩個線程同步。控制線程同步的方法有多種,如阻塞、互斥及信號量等。
在本系統中采用的是互斥方法:一個線程通過設置事件標志通知其它線程。事件可以使用createvent函數來組建,線程和事件的關系主要表現在一下兩方面:有信號和無信號。當某一線程被創建和正在運行時,該線程是無信號的,一旦線程終止,它就變成有信號的。線程通過使用seetveni、reseteveni函數來將事件置成有信號和無信號,而其他線程通過調用waiftorsingelobjec函數等待事件的發生,這樣就 了線程之間的同步控制。