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

聯(lián)系興邦電子

全國(guó)咨詢(xún)熱線(xiàn):40000-63966

售后:0371-55132951/55132952

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

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

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

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

  ⒈ 引言

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

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

 ?、?多線(xiàn)程編程

  2.1 線(xiàn)程概述

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

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

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

  2.3 線(xiàn)程類(lèi)的特性及方法

  線(xiàn)程類(lèi)包括FreeOnTerminate、Thandle、Priority、ReturnValue、  Suspended、Terminated、ThreadID等特性。
  線(xiàn)程類(lèi)主要包括DoTerminate過(guò)程、Execute過(guò)程、Resume過(guò)程、Suspend過(guò)程、Synchronize過(guò)程、Terminate過(guò)程等幾種方法。

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

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

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

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

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

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

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

  3.3 中間件的主要線(xiàn)程

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

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

  線(xiàn)程主要語(yǔ)句如下:
  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校驗(yàn)錯(cuò)誤,退出 
  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)); //機(jī)器名稱(chēng)
  S_Addr := Trim(copy(S_Buf, 31, 15)); //IP地址
  //查詢(xún)此客戶(hù)機(jī)器是否連接過(guò)服務(wù)器
  S_ClientNO := G_ClientHostList.IndexOf(S_ZIPCode);
  if S_ClientNO >= 0 then
  begin
  //找到,給客戶(hù)返回端口號(hào)碼等信息
  S_Str := AddLeftZero(IntToStr(G_ServerSocketInfo[S_ClientNO].ServerUp.Port),5);
  //客戶(hù)上傳端口
  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);
  //客戶(hù)上傳端口
  S_ClientPort := GetNewPort;
  G_ServerSocketInfo[S_ClientNO].ServerUp.Port := S_ClientPort
  //下傳端口
  S_ClientPort := GetNewPort;
  G_ServerSocketInfo[S_ClientNO].ServerDown.Port :=
  S_ClientPort;
  //開(kāi)始監(jiān)聽(tīng)
  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 多線(xiàn)程技術(shù)實(shí)現(xiàn)的難點(diǎn)

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

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

  ⒋ 結(jié)束語(yǔ)

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

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

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

本文關(guān)鍵詞:多線(xiàn)程技術(shù),校園一卡通系統(tǒng),校園一卡通,一卡通系統(tǒng),中間件,,線(xiàn)程技術(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ù)字化校園
回到頂部