999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

HashTable在WinForm下的上位機軟件開發(fā)中的應用

2021-09-16 08:00:38宋城虎
科技創(chuàng)新與應用 2021年25期
關鍵詞:定義

宋城虎,馬 靜

(中國電子科技集團公司第二十七研究所,河南 鄭州450047)

HashTable(也叫哈希表),是根據(jù)關鍵碼值(key,value)而直接進行訪問的數(shù)據(jù)結構。它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。在.NET Framework中,System.Collections命名空間提供了HashTable容器的實現(xiàn)。HashTable中key、value鍵值對均為object類型,所以HashTable可以支持任何類型的key、value鍵值對。

在工程應用中,上位機應用程序通常需要與多個下位機或者外圍設備進行通信,從而實現(xiàn)對設備的控制以及設備狀態(tài)與數(shù)據(jù)的接收與處理。當上位機通信的對象增多時,上位機編程也會隨之變得越來越復雜。

本文以C#WinForm框架下的上位機編程為例討論一種HashTable的應用方法,該方法實現(xiàn)簡單,使用靈活方便,可大幅度簡化上位機程序開發(fā)中的一些復雜問題。

1 雙鍵哈希表

HashTable的結構為1個key對應1個value,這個結構在實際應用中經常顯得過于單一,如果兩個key對應1個value那么顯然就會靈活許多,我們就可以構建類似于“對象‘key1’的‘key2’屬性為‘value’”這樣的邏輯關系(如圖1、圖2所示)。

由于在.NET Framework中的HashTable中key、value鍵值對均為object類型,那么value本身也可以存儲另一個HashTable,因此我們可以構建兩層哈希表來實現(xiàn)雙鍵哈希結構,即在第一層HashTable1中通過key1存儲第二層HashTable2,在第二層HashTable2中通過key2存儲value值(如圖3所示)。

于是我們只需要定義哈希表的三個基本操作“存儲、讀取、刪除”即可實現(xiàn)雙鍵哈希表功能。其中刪除需要針對key1和key2定義兩個函數(shù),因此總共需要定義4個函數(shù),以下給出代碼:

1.1 存儲函數(shù)

void hash_save(Hashtable hash,object key1,object key2,object value)

{

if(hash!=null)

{

Hashtable hash1;

if(hash[key1]==null)

{

hash1=new Hashtable();

hash.Add(key1,hash1);

}

else hash1=(Hashtable)(hash[key1]);

if(hash1[key2]==null)hash1.Add(key2,value);

else{

hash1.Remove(key2);

hash1.Add(key2,value);

}}}

1.2 讀取函數(shù)

object hash_Load(Hashtable hash,object key1,object key2)

{

i(fhash[key1]!=null)return((Hashtable)(hash[key1]))[key2];

else return null;

}

1.3 清除key1

void hash_remove_key1(Hashtable hash,object key1)

{

((Hashtable)(hash[key1])).Clea(r);

}

1.4 清除key2

void hash_remove_key2(Hashtable hash,object key1,object key2)

{

((Hashtable)(hash[key1])).Remove(key2);

}

2 工程應用

2.1 通信連接管理

上位機應用程序通常需要與多個下位機或者外圍設備進行通信,這里以udp通信為例(其他通信原理相同)。WinForm框架中有Socket類用來實現(xiàn)網絡通信,在建立一個udp通信時,我們需要實例化一個Socket對象,定義目標IPEndPoint和本地IPEndPoint,建立監(jiān)聽線程,在監(jiān)聽線程的回調函數(shù)中編寫數(shù)據(jù)處理代碼。

當上位機要與多個對象同時建立通信時,通常將以上過程復制多次,并用不同的變量名進行區(qū)分。當通信對象特別多時代碼的編輯和維護就會變得非常困難,且不方便移植也不利于復用。

這里借助上文定義的雙鍵哈希表可極大程度地優(yōu)化這一過程。實現(xiàn)思路如下:

(1)給每一條通信鏈路定義一個唯一標識Sign;

(2)以標識Sign為key1、以參數(shù)標識為key2對該鏈路的所有相關參數(shù)進行注冊,存儲在哈希表中,例如給名為“sign1”的連接注冊目標IP:

hash_sav(ehash1,"sign1","目標IP","192.168.1.10");

(3)定義一個主索引用來記錄所有已經注冊的Sign,主索引依然可以使用雙鍵哈希表實現(xiàn),例如索引中增加一個新的名為“Sign1”的連接:

int max=(int)hash_load(hash1,"udp主索引","連接總數(shù)")+1

hash_save(hash1,"udp主索引","連接總數(shù)",max);

hash_save(hash1,"udp主索引",max,"Sign1");

(4)定義udpcreate函數(shù),該函數(shù)針對一個特定Sign,建立一條udp通信鏈路,返回初始化完畢的Socket對象。所有初始化相關參數(shù)以Sign為key在哈希表中讀取,例如讀取連接“sign1”的目標IP:

string ip=hash_load(hash1,"sign1","目標IP").ToString();

(5)在程序的udp初始化環(huán)節(jié)遍歷第3步中定義的主索引,調用udpcreate函數(shù)初始化所有udp連接;

(6)單獨定義每條通信的接收數(shù)據(jù)的回調函數(shù),回調函數(shù)可以以委托結合文本宏的方式注冊在哈希表中。通信鏈路的注冊可以通過文件讀取轉移到配置文件中。

主索引操作以及udpcreate函數(shù)等通用型代碼均可封裝到一個模塊中,方便移植和復用。這樣每次開發(fā)一個新的上位機程序只需要編寫數(shù)據(jù)處理的回調函數(shù)以及根據(jù)工程需求編輯配置文件即可。

2.2 其他功能應用

使用雙鍵哈希表可以不以變量為載體,動態(tài)地存儲和讀取任意數(shù)據(jù),并能將數(shù)據(jù)關聯(lián)在任意對象上,這意味著它幾乎可以應用到程序的任何地方。例如,我們可以在控件刷新時讀取控件上綁定的狀態(tài)數(shù)據(jù)來決定控件的外觀或者顯示文字,這樣我們就可以通過改變哈希值來控制控件的狀態(tài)刷新;我們還可以利用雙鍵哈希表將兩個控件關聯(lián)起來,實現(xiàn)類似于父節(jié)點和子節(jié)點這樣的結構關系等。

2.3 注意事項

由于使用雙鍵哈希表會自動創(chuàng)建許多次級HashTable,當某個key1不再使用時,應當注意釋放key1對應的資源,也就是調用上文提到的hash_remove_key1函數(shù),避免出現(xiàn)內存泄漏。

3 實際應用

在某工程項目的上位機軟件開發(fā)中,與上位機通信的分機有7個,其中包含udp和串口通信。該軟件開發(fā)中大量使用了雙鍵哈希表,與以往的開發(fā)經驗做對比極大程度地提高了開發(fā)效率,調試過程中的bug也有顯著減少,并且能夠簡單快捷地移植到其他項目開發(fā)中(如圖4、圖5所示)。

圖4 某項目上位機軟件通信調試界面

圖5 某項目通信配置文件

4 結束語

文章利用.NET Framework中的HashTable的key和value可支持任意類型值的特點,設計了一種雙鍵哈希表,可實現(xiàn)將任意類型的兩個對象作為索引存儲一個任意類型的value值。文章以WinForm框架下上位機程序開發(fā)為背景,以udp通信編程為例,詳細闡述了該技術的應用方法與效果,對該技術在其他方面的應用進行了展望。該技術已在作者參與的多個工程項目中得到應用,并得到了非常好的應用效果。

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統(tǒng)計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国产视频入口| 四虎成人在线视频| 91麻豆精品国产91久久久久| 日韩不卡高清视频| 国产h视频免费观看| 亚洲香蕉在线| 欧美成人一区午夜福利在线| 国产高清毛片| 国产精品开放后亚洲| 成人福利一区二区视频在线| 亚洲男人的天堂在线观看| 综合色婷婷| 九九免费观看全部免费视频| 亚洲美女一区| 国产色爱av资源综合区| 亚洲精品在线影院| 亚洲成人精品在线| 乱色熟女综合一区二区| 欧美成人怡春院在线激情| 男人天堂伊人网| 另类专区亚洲| 夜夜操天天摸| 亚洲精品中文字幕午夜| lhav亚洲精品| 欧美日本激情| 综合久久久久久久综合网| 欧美成人h精品网站| 四虎影视国产精品| 久久毛片网| 欧美综合区自拍亚洲综合绿色 | 71pao成人国产永久免费视频| 亚洲无码37.| 日本www在线视频| 97精品国产高清久久久久蜜芽| 欧美精品v| 国产特级毛片aaaaaaa高清| 国产成人高清精品免费软件| 99国产精品国产| 黄色网页在线播放| 天堂成人av| 美女内射视频WWW网站午夜 | 97人人做人人爽香蕉精品| 中文成人在线视频| 国产精品女熟高潮视频| 国产成人精品一区二区不卡| 成人精品免费视频| 亚洲二区视频| 99热这里只有精品2| 免费人成网站在线观看欧美| 亚洲一级毛片免费观看| 国产精品入口麻豆| 国产精品久久自在自2021| a级毛片视频免费观看| 色综合天天操| 全色黄大色大片免费久久老太| 国产在线无码一区二区三区| 91青青视频| 国产在线观看91精品| 无码精品福利一区二区三区| 玖玖精品视频在线观看| 一级黄色网站在线免费看| 91久久夜色精品国产网站 | 制服丝袜无码每日更新| 欧美在线精品一区二区三区| 亚洲无码视频图片| 免费无遮挡AV| 99久久这里只精品麻豆| 日韩成人免费网站| 国产精品亚洲一区二区在线观看| 91丨九色丨首页在线播放| 亚洲天堂免费| 国产美女视频黄a视频全免费网站| 男女性色大片免费网站| 国产91高清视频| 亚洲AV无码乱码在线观看裸奔| 国产一级精品毛片基地| 欧美天堂在线| 国产日本欧美在线观看| 亚洲精品午夜天堂网页| 国产亚洲视频免费播放| 久久亚洲高清国产| 国产91麻豆免费观看|