歡迎您訪問鄭州興邦電子股份有限公司官方網(wǎng)站!
    阿里巴巴誠信通企業(yè)
    全國咨詢熱線:40000-63966
    興邦電子,中國水控機第一品牌

    聯(lián)系興邦電子

    全國咨詢熱線:40000-63966

    售后:0371-55132951/55132952

    工廠:河南省 鄭州市 高新區(qū)蓮花街電子電器產(chǎn)業(yè)園

    多線程技術(shù)在校園“一卡通”系統(tǒng)中的應(yīng)用

    文章出處:http://www.xujuanpiju.com 作者: 人氣: 發(fā)表時間:2011年09月09日

    [文章內(nèi)容簡介]:在校園“一卡通”系統(tǒng)中利用Delphi提供的多線程技術(shù),應(yīng)用線程對象Thread提供的特性和方法編制程序,提高了平臺服務(wù)器和各個子系統(tǒng)服務(wù)器的數(shù)據(jù)處理速度,充分利用了數(shù)字化校園的系統(tǒng)資源,有效地提高了整個“一卡通”系統(tǒng)的工作效率。

      ⒈ 引言

      校園“一卡通”系統(tǒng)為“數(shù)字化校園”提供了全面的數(shù)據(jù)采集網(wǎng)絡(luò)平臺,是“數(shù)字化校園”建設(shè)的重要組成部分和基礎(chǔ)工程。所謂“一卡通”,即在學校內(nèi),凡有現(xiàn)金、票證或需要識別身份的地方均采用卡來完成,它既是數(shù)字校園的數(shù)據(jù)信息存儲和處理中心,也是整個數(shù)字校園的核心引擎,是一個跨平臺、跨數(shù)據(jù)庫的可自我發(fā)展的數(shù)字化校園信息系統(tǒng)平臺,既可為學校已有的各管理系統(tǒng)建立接口,連接各個管理子系統(tǒng),又可實現(xiàn)整個數(shù)字校園的數(shù)據(jù)無重復、無冗余的存儲與共享,真正實現(xiàn)“一卡在手,走遍校園”。

      在校園“一卡通”系統(tǒng)中引入Delphi提供的多線程技術(shù),使得系統(tǒng)程序結(jié)構(gòu)更加合理,避免了程序運行時單一線程瓶頸所造成的系統(tǒng)資源的極大浪費,最大限度地提高了系統(tǒng)資源的存儲及共享效率。

      ⒉ 多線程編程

      2.1 線程概述

      線程(Thread)是個動態(tài)的對象,它是處理器調(diào)度的基本單位,表示進程中的一個控制點,執(zhí)行一系列的指令。在操作系統(tǒng)中引入線程的概念,可減小并發(fā)執(zhí)行的時間和空間開銷,允許通過在系統(tǒng)中建立更多更好的線程來提高并發(fā)性。

      2.2 多線程編程技術(shù)

      所有進程至少都擁有一個執(zhí)行線程,我們稱該執(zhí)行線程為主線程。在一個程序中,除了主線程之外,可能還創(chuàng)建有一個或更多的執(zhí)行線程。通常,一個線程一旦創(chuàng)建即開始執(zhí)行。

      2.3 線程類的特性及方法

      線程類包括FreeOnTerminate、Thandle、Priority、ReturnValue、  Suspended、Terminated、ThreadID等特性。
      線程類主要包括DoTerminate過程、Execute過程、Resume過程、Suspend過程、Synchronize過程、Terminate過程等幾種方法。

      ⒊ 多線程編程在“一卡通”系統(tǒng)中的應(yīng)用

      在“一卡通”系統(tǒng)中有四個線程共同使用平臺服務(wù)器的資源一起工作,即:平臺服務(wù)器主線程、子系統(tǒng)流水處理線程、中間件接收子系統(tǒng)流水線程、中間件轉(zhuǎn)發(fā)收到的流水線程。

      3.1 多線程技術(shù)在平臺服務(wù)器中的應(yīng)用

      當整個一卡通系統(tǒng)運作起來時,平臺服務(wù)器、中間件、接收流水線程同時運行,平臺服務(wù)器完成統(tǒng)計和查詢的任務(wù),中間件實現(xiàn)與各個子系統(tǒng)之間數(shù)據(jù)的通信,接收子系統(tǒng)處理的數(shù)據(jù)并下發(fā)給其它子系統(tǒng),接收流水的線程完成對各個子系統(tǒng)的數(shù)據(jù)處理,提交到中心數(shù)據(jù)服務(wù)器。

      中間件接收子系統(tǒng)的流水,接收到后就轉(zhuǎn)發(fā)到其它子系統(tǒng)。子系統(tǒng)上傳來流水的處理,是通過流水處理線程單獨完成的。平臺服務(wù)器主程序不參與流水的處理,只上傳處理后的數(shù)據(jù)進行統(tǒng)計和查詢。子系統(tǒng)隨時有流水產(chǎn)生就隨時發(fā)送,中間件隨時接收,處理線程隨時處理,主程序就能隨時查詢到卡的消費情況。四個線程一起工作,保證整個“一卡通”的實時性、高效性。

      3.2 多線程技術(shù)在子系統(tǒng)中的應(yīng)用

      在各個子系統(tǒng)的服務(wù)器中,同樣運行著子系統(tǒng)服務(wù)器線程、中間件發(fā)送線程、中間件接收線程和接收流水處理線程等四個線程。四個線程同時運行保證子系統(tǒng)與服務(wù)器數(shù)據(jù)同步。子系統(tǒng)產(chǎn)生流水,中間件發(fā)送,中間件接收平臺服務(wù)器發(fā)出的流水,處理線程對接收到的流水進行處理。多線程運行原理與平臺服務(wù)器是一樣的,實現(xiàn)方式略有不同。平臺服務(wù)器對上傳來的流水保存流水記錄,并修改帳戶余額,而在子系統(tǒng)中不保存流水記錄,只修改帳戶余額。

      3.3 中間件的主要線程

      中間(middleware)件是位于平臺(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),這些服務(wù)具有標準的程序接口和協(xié)議。針對不同的操作系統(tǒng)和硬件平臺,它們可以有符合接口和協(xié)議規(guī)范的多種實現(xiàn)。

      在中間件服務(wù)器端靜態(tài)放置一個ServerSocet組件,用于提供動態(tài)分配客戶連接端口的代理服務(wù)。客戶端向服務(wù)器請求鏈接時,客戶端向服務(wù)器發(fā)請求連接。服務(wù)器端響應(yīng)OnConn及OnAccept事件。客戶端連接服務(wù)器成功后,向服務(wù)器端發(fā)送分配新端口指令。服務(wù)器端在客戶機連接映射表中搜索此客戶機,有返回已分配的端口號,無分配一新的端口號。端口分配成功后,動態(tài)創(chuàng)建兩個ServerSocet組件,一個用于發(fā)送數(shù)據(jù),一個用于接收數(shù)據(jù)。

      線程主要語句如下:
      Socket.ReceiveBuf(S_Buf, Socket.ReceiveLength); //取緩沖區(qū)數(shù)據(jù)
      S_Num := CalculateCRC(S_Buf, Socket.ReceiveLength - 4);
      if not ((S_NumBuf[0]=S_Buf[S_ReceiveLen-4])and 
      (S_NumBuf[1]=S_Buf[S_ReceiveLen-3])and (S_NumBuf[2]=S_Buf[S_ReceiveLen-2])and
      (S_NumBuf[3]=S_Buf[S_ReceiveLen-1] )) then
      begin //CRC校驗錯誤,退出 
      exit;
      end;
      if copy(S_Buf, 0, 5) = ‘00000’then
      begin
      S_ZIPCode := Trim(copy(S_Buf, 6, 5)); //工作站編碼
      S_Host := Trim(copy(S_Buf, 11, 20)); //機器名稱
      S_Addr := Trim(copy(S_Buf, 31, 15)); //IP地址
      //查詢此客戶機器是否連接過服務(wù)器
      S_ClientNO := G_ClientHostList.IndexOf(S_ZIPCode);
      if S_ClientNO >= 0 then
      begin
      //找到,給客戶返回端口號碼等信息
      S_Str := AddLeftZero(IntToStr(G_ServerSocketInfo[S_ClientNO].ServerUp.Port),5);
      //客戶上傳端口
      S_Str:=S_Str+AddLeftZero(IntToStr(G_ServerSocketInfo [S_ClientNO].ServerDown.Port), 5);
      //下傳端口
      OnSendBackClient(10033, ‘00001’, S_Str, Socket);
      End;
      Try
      S_ClientNO := G_ClientHostList.Add(S_ZIPCode);
      G_ServerSocketInfo[S_ClientNO].ServerDown := 
      TServerSocket.Create(nil);
      G_ServerSocketInfo[S_ClientNO].ServerUp := 
      TServerSocket.Create(nil);
      //客戶上傳端口
      S_ClientPort := GetNewPort;
      G_ServerSocketInfo[S_ClientNO].ServerUp.Port := S_ClientPort
      //下傳端口
      S_ClientPort := GetNewPort;
      G_ServerSocketInfo[S_ClientNO].ServerDown.Port :=
      S_ClientPort;
      //開始監(jiān)聽
      G_ServerSocketInfo[S_ClientNO].ServerUp.Active := true;
      G_ServerSocketInfo[S_ClientNO].ServerDown.Active := True;
      except
      OnSendBackClient(10038, ‘00002’, ‘90001’, Socket);
      //服務(wù)器分配端口失敗
      end;
      OnSendBackClient(100033, ‘00001’, S_Str, Socket); 
      //服務(wù)器分配端口成功
      End;

      3.4 多線程技術(shù)實現(xiàn)的難點

      雖然多線程可以提高系統(tǒng)效率,但存在很大的危險性。在程序編寫時一定要注意在多線程環(huán)境下運行可能會出現(xiàn)的情況:

      (1) 當對某一帳戶進行把余額賦值成某個值的補貼操作時,其它子系統(tǒng)也有對這個帳戶的余額操作時,就會出現(xiàn)帳目上的不平衡。解決這個問題的辦法就是對余額的操作只能對加減不能直接賦值,這樣就避免了這個問題的出現(xiàn)。
      (2) 當接收到流水和本地要同時對某個帳戶進行操作時,就會出現(xiàn)數(shù)據(jù)庫中帳戶余額表的某條記錄被鎖的情況。在接收流水的處理線程中,若一次處理不成功,可多處理幾次,等待本地釋放被鎖記錄。

      ⒋ 結(jié)束語

      在“一卡通”系統(tǒng)中采用多線程編程技術(shù),可以提高數(shù)據(jù)處理的速度,充分利用系統(tǒng)資源,有效提高整個“一卡通”系統(tǒng)的效率,實現(xiàn)整個數(shù)字校園的數(shù)據(jù)無重復、無冗余的存儲與共享,真正實現(xiàn)高度數(shù)據(jù)共享的數(shù)字化校園系統(tǒng)。

      參考文獻:
      [1] 王學敏.基于數(shù)字化校園的一卡通系統(tǒng)的設(shè)計與實現(xiàn)[D].廈門大學學報,2008.
      [2] 張升平.數(shù)字化校園之校園一卡通的建設(shè)[J].重慶工商大學學報,2008,01.

      收稿日期:2010-03-03
      作者簡介:王玲(1965-),女,遼寧鞍山人,鞍山市第三中等職業(yè)技術(shù)專業(yè)學校高級講師。研究方向:計算機網(wǎng)絡(luò)。沈霞(1966-),女,遼寧鞍山人,遼寧科技大學計算機科學與工程學院副教授。研究方向:計算機網(wǎng)絡(luò)。

    本文關(guān)鍵詞:多線程技術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,,線程技術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,數(shù),程技術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,數(shù)字,技術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,數(shù)字化,術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,數(shù)字化校,,校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,數(shù)字化校園
    回到頂部