本發(fā)明實(shí)施方式涉及數(shù)據(jù)收發(fā)領(lǐng)域,特別是涉及一種數(shù)據(jù)快速收發(fā)的方法及裝置。
背景技術(shù):
目前無線手柄主要采用直接收發(fā)射與讀取方式,無線模組必須先發(fā)射再等待接收回應(yīng)。而發(fā)射出的數(shù)據(jù)必須等待接收回應(yīng)都會(huì)花大量時(shí)間,應(yīng)用程序只有等待該操作完成后才能夠執(zhí)行下一步操作。完成1個(gè)數(shù)據(jù)的收發(fā)大約為700ms左右,主應(yīng)用一般都是直接調(diào)用此操作,然后應(yīng)用就會(huì)提示用戶等待,數(shù)據(jù)正在收射。此時(shí)用戶無法進(jìn)行任何操作,從而影響游戲操作的流暢程度,直接導(dǎo)致用戶體驗(yàn)滿意度下降。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施方式主要解決的技術(shù)問題是提供一種數(shù)據(jù)快速收發(fā)的方法及裝置,能夠。
為解決上述技術(shù)問題,本發(fā)明實(shí)施方式采用的一個(gè)技術(shù)方案是:提供一種游戲手柄快速收發(fā)數(shù)據(jù)的方法,游戲手柄設(shè)置有第一收發(fā)模塊和第二收發(fā)模塊,方法包括:為游戲手柄構(gòu)建應(yīng)用主線程和收發(fā)副線程;當(dāng)主線程需要發(fā)送數(shù)據(jù)時(shí),使收發(fā)副線程通過第一收發(fā)模塊和第二收發(fā)模塊的相互配合進(jìn)行發(fā)送數(shù)據(jù);當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊接收數(shù)據(jù)時(shí),收發(fā)副線程對(duì)第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且在數(shù)據(jù)校驗(yàn)通過時(shí),將數(shù)據(jù)發(fā)送至應(yīng)用主線程。
其中,第一收發(fā)模塊的處理優(yōu)先級(jí)低于第二收發(fā)模塊的處理優(yōu)先;當(dāng)主線程需要發(fā)送數(shù)據(jù)時(shí),使收發(fā)副線程通過第一收發(fā)模塊和第二收發(fā)模塊的相互配合進(jìn)行發(fā)送數(shù)據(jù)包括:當(dāng)應(yīng)用主線程需要發(fā)送數(shù)據(jù)時(shí),使應(yīng)用主線程發(fā)送執(zhí)行消息給預(yù)設(shè)消息列表,并將數(shù)據(jù)拷貝到一級(jí)緩存;使收發(fā)副線程根據(jù)先進(jìn)先出算法,從預(yù)設(shè)消息列表提取消息并將一級(jí)緩存中的與提取到的消息相對(duì)應(yīng)的數(shù)據(jù)拷貝到二級(jí)緩存中,消除執(zhí)行消息;使收發(fā)副線程根據(jù)第一收發(fā)模塊和第二收發(fā)模塊的處理優(yōu)先級(jí)原則和空閑原則依次將二級(jí)緩存中的數(shù)據(jù)拷貝到第一收發(fā)模塊或者第二收發(fā)模塊中進(jìn)行發(fā)送數(shù)據(jù)。
其中,使副線程根據(jù)第一收發(fā)模塊和第二收發(fā)模塊的處理優(yōu)先級(jí)原則和空閑原則依次將二級(jí)緩存中的數(shù)據(jù)拷貝到第一收發(fā)模塊或者第二收發(fā)模塊中進(jìn)行發(fā)送數(shù)據(jù)包括:從二級(jí)緩存中提取一數(shù)據(jù),在一數(shù)據(jù)的頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),并且將一數(shù)據(jù)作為待收數(shù)據(jù);判斷第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑;當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊只存在一個(gè)空閑的收發(fā)模塊,將待收數(shù)據(jù)發(fā)送至空閑的收發(fā)模塊,由空閑的收發(fā)模塊進(jìn)行收發(fā)處理,或者,當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊均空閑時(shí),將待收數(shù)據(jù)發(fā)送至第二收發(fā)模塊,由第二收發(fā)模塊進(jìn)行收發(fā)處理;當(dāng)?shù)谝皇瞻l(fā)模塊或者第二收發(fā)模塊完成對(duì)一數(shù)據(jù)的接收處理之后,從二級(jí)緩存中提取下一數(shù)據(jù),并且下一個(gè)數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增,將一下數(shù)據(jù)作為待收數(shù)據(jù),并且返回判斷第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑的步驟。
其中,當(dāng)主線程需要發(fā)送數(shù)據(jù)時(shí),使收發(fā)副線程通過第一收發(fā)模塊和第二收發(fā)模塊的相互配合進(jìn)行發(fā)送數(shù)據(jù)包括:從二級(jí)緩存中提取第一數(shù)據(jù),在第一數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí);將第一數(shù)據(jù)分配到第二收發(fā)模塊進(jìn)行處理;從二級(jí)緩存中提取第二數(shù)據(jù),在第二數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),其中,在第二數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第一數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;判斷第二數(shù)據(jù)和第一數(shù)據(jù)是否是相同數(shù)據(jù);如果相同,則分配到第二收發(fā)模塊進(jìn)行處理;如不同,則分配到第一收發(fā)模塊進(jìn)行處理;從二級(jí)緩存中提取第三數(shù)據(jù),在第三數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第二數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;判斷第三數(shù)據(jù)與第一數(shù)據(jù)和第二數(shù)據(jù)是否是相同數(shù)據(jù);如與第一數(shù)據(jù)和第二數(shù)據(jù)中的其中一個(gè)是相同數(shù)據(jù),將第三數(shù)據(jù)分配到與之相同的數(shù)據(jù)進(jìn)行收發(fā)的收發(fā)模塊一同收發(fā);如與兩者都不同,則等待第一收發(fā)模塊和第二發(fā)收模塊處于空閑再進(jìn)行處理。
其中,當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊接收數(shù)據(jù)時(shí),收發(fā)副線程對(duì)第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn)包括:在收發(fā)數(shù)據(jù)之前在數(shù)據(jù)的尾部均添加循環(huán)冗余校驗(yàn)碼;第一收發(fā)模塊和第二收發(fā)模塊接收數(shù)據(jù)時(shí),收發(fā)副線程對(duì)第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn)。
為解決上述技術(shù)問題,本發(fā)明實(shí)施方式采用的另一個(gè)技術(shù)方案是:提供一種游戲手柄快速收發(fā)數(shù)據(jù)的裝置,游戲手柄設(shè)置有第一收發(fā)模塊和第二收發(fā)模塊,包括:構(gòu)建模塊,用于為游戲手柄構(gòu)建應(yīng)用主線程和收發(fā)副線程;發(fā)送模塊,用于當(dāng)主線程需要發(fā)送數(shù)據(jù)時(shí),使收發(fā)副線程通過第一收發(fā)模塊和第二收發(fā)模塊的相互配合進(jìn)行發(fā)送數(shù)據(jù);校驗(yàn)?zāi)K,用于當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊接收數(shù)據(jù)時(shí),收發(fā)副線程對(duì)第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且在數(shù)據(jù)校驗(yàn)通過時(shí),將數(shù)據(jù)發(fā)送至應(yīng)用主線程。
其中,第一收發(fā)模塊的處理優(yōu)先級(jí)低于第二收發(fā)模塊的處理優(yōu)先,發(fā)送模塊包括:發(fā)送單元,用于當(dāng)應(yīng)用主線程需要發(fā)送數(shù)據(jù)時(shí),使應(yīng)用主線程發(fā)送執(zhí)行消息給預(yù)設(shè)消息列表,并將數(shù)據(jù)拷貝到一級(jí)緩存;第一提取單元,用于使收發(fā)副線程根據(jù)先進(jìn)先出算法,從預(yù)設(shè)消息列表提取消息并將一級(jí)緩存中的與提取到的消息相對(duì)應(yīng)的數(shù)據(jù)拷貝到二級(jí)緩存中,消除執(zhí)行消息;拷貝單元,用于使收發(fā)副線程根據(jù)第一收發(fā)模塊和第二收發(fā)模塊的處理優(yōu)先級(jí)原則和空閑原則依次將二級(jí)緩存中的數(shù)據(jù)拷貝到第一收發(fā)模塊或者第二收發(fā)模塊中進(jìn)行發(fā)送數(shù)據(jù)。
其中,拷貝單元包括:提取子單元,用于從二級(jí)緩存中提取一數(shù)據(jù),在一數(shù)據(jù)的頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),并且將一數(shù)據(jù)作為待收數(shù)據(jù);判斷子單元,用于判斷第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑;發(fā)送子單元,用于當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊只存在一個(gè)空閑的收發(fā)模塊,將待收數(shù)據(jù)發(fā)送至空閑的收發(fā)模塊,由空閑的收發(fā)模塊進(jìn)行收發(fā)處理,或者,當(dāng)?shù)谝皇瞻l(fā)模塊和第二收發(fā)模塊均空閑時(shí),將待收數(shù)據(jù)發(fā)送至第二收發(fā)模塊,由第二收發(fā)模塊進(jìn)行收發(fā)處理;提取子單元,用于當(dāng)?shù)谝皇瞻l(fā)模塊或者第二收發(fā)模塊完成對(duì)一數(shù)據(jù)的接收處理之后,從二級(jí)緩存中提取下一數(shù)據(jù),并且下一個(gè)數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增,將一下數(shù)據(jù)作為待收數(shù)據(jù),并且返回判斷第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑的步驟。
其中,發(fā)送模塊包括:第二提取單元,用于從二級(jí)緩存中提取第一數(shù)據(jù),在第一數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí);第一分配單元,用于將第一數(shù)據(jù)分配到第二收發(fā)模塊進(jìn)行處理;第三提取單元,用于從二級(jí)緩存中提取第二數(shù)據(jù),在第二數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),其中,在第二數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第一數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;第一判斷單元,用于判斷第二數(shù)據(jù)和第一數(shù)據(jù)是否是相同數(shù)據(jù);第二分配單元,用于如果第二數(shù)據(jù)和第一數(shù)據(jù)相同,則分配到第二收發(fā)模塊進(jìn)行處理;第三分配單元,用于如第二數(shù)據(jù)和第一數(shù)據(jù)不同,則分配到第一收發(fā)模塊進(jìn)行處理;第四提取單元,用于從二級(jí)緩存中提取第三數(shù)據(jù),在第三數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第二數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;第二判斷單元,用于判斷第三數(shù)據(jù)與第一數(shù)據(jù)和第二數(shù)據(jù)是否是相同數(shù)據(jù);第四分配單元,用于如與第一數(shù)據(jù)和第二數(shù)據(jù)中的其中一個(gè)是相同數(shù)據(jù),將第三數(shù)據(jù)分配到與之相同的數(shù)據(jù)進(jìn)行收發(fā)的收發(fā)模塊一同收發(fā);第五分配單元,用于如與兩者都不同,則等待第一收發(fā)模塊和第二發(fā)收模塊處于空閑再進(jìn)行處理。
其中,校驗(yàn)?zāi)K還包括:添加單元,用于在收發(fā)數(shù)據(jù)之前在數(shù)據(jù)的尾部均添加循環(huán)冗余校驗(yàn)碼;校驗(yàn)單元,用于第一收發(fā)模塊和第二收發(fā)模塊接收數(shù)據(jù)時(shí),收發(fā)副線程對(duì)第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn)。
本發(fā)明實(shí)施方式的有益效果是:區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明實(shí)施方式提供一種游戲手柄快速收發(fā)數(shù)據(jù)的方法,當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速發(fā)送,提高了數(shù)據(jù)的發(fā)送效率,節(jié)省了時(shí)間,并且收發(fā)完成后還對(duì)數(shù)據(jù)進(jìn)行安全校驗(yàn),達(dá)到數(shù)據(jù)不丟失的效果。
附圖說明
圖1是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第一實(shí)施方式的示意圖
圖2是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式的流程圖;
圖3是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中雙線程配合發(fā)送數(shù)據(jù)的流程圖;
圖4是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中單模塊收發(fā)算法的流程圖;
圖5是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中雙模塊收發(fā)算法的流程圖;
圖6是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的裝置的第一實(shí)施方式的示意圖;
圖7是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的裝置的第一實(shí)施方式的示意圖;
圖8是本發(fā)明執(zhí)行數(shù)據(jù)快速收發(fā)的方法的游戲手柄的示意圖。
具體實(shí)施方式
需要說明的是,本發(fā)明實(shí)施例提供的數(shù)據(jù)快速收發(fā)的方法的執(zhí)行主體是雙核無線手柄。
參閱圖1,圖1是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第一實(shí)施方式的流程圖。游戲手柄40設(shè)置有第一收發(fā)模塊41、第二收發(fā)模塊42和MCU控制器43,MCU控制器43中包括主線程431和副線程432。當(dāng)所述主線程431需要發(fā)送數(shù)據(jù)時(shí),主線程431和副線程相互配合將數(shù)據(jù)分配給所述第一收發(fā)模塊41和第二收發(fā)模塊42,然后再通過所述第一收發(fā)模塊41和第二收發(fā)模塊42之間的相互配合進(jìn)行發(fā)送數(shù)據(jù)至外部接收端50。當(dāng)所述第一收發(fā)模塊41和第二收發(fā)模塊42接收數(shù)據(jù)時(shí),所述副線程432對(duì)所述第一收發(fā)模塊和第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且在所述數(shù)據(jù)校驗(yàn)通過時(shí),將所述數(shù)據(jù)發(fā)送至主線程431。需要說明的是,接收端50可以是游戲手柄,也可以是服務(wù)器或是移動(dòng)終端等等。
在本發(fā)明實(shí)施例中,當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速發(fā)送,提高了數(shù)據(jù)的發(fā)送效率,節(jié)省了時(shí)間,并且收發(fā)完成后還對(duì)數(shù)據(jù)進(jìn)行安全校驗(yàn),達(dá)到數(shù)據(jù)不丟失的效果。
請(qǐng)參閱圖2,圖2是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式的流程圖,所述游戲手柄設(shè)置有第一收發(fā)模塊和第二收發(fā)模塊,數(shù)據(jù)快速收發(fā)的方法包括:
11:為所述游戲手柄構(gòu)建應(yīng)用主線程和收發(fā)副線程;
構(gòu)建的應(yīng)用主線程和收發(fā)副線程均在MCU控制器中,為了解決游戲操作等待的問題,采用構(gòu)建應(yīng)用主線程和收發(fā)副線程的異步收發(fā)方式,即主線程收到數(shù)據(jù)先發(fā)消息給副線程,讓副線程來執(zhí)行費(fèi)時(shí)的操作,來提高主線程的執(zhí)行效率,達(dá)到提高游戲造作流暢程度的效果。
12:當(dāng)所述應(yīng)用主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù);
在游戲手柄初始化時(shí),MCU控制器通過將無線模塊與模塊所需最大收發(fā)空間直接傳入到MCU控制器內(nèi)存中,再根據(jù)各模塊的配置情況,自動(dòng)將模塊進(jìn)行劃分,通過對(duì)模塊的劃分,可得到所述第一收發(fā)模塊的處理優(yōu)先級(jí)低于所述第二收發(fā)模塊的處理優(yōu)先,這樣再進(jìn)行處理數(shù)據(jù)收發(fā)時(shí),先將數(shù)據(jù)傳輸給第二收發(fā)模塊,如果第二收發(fā)模塊沒有空閑再將數(shù)據(jù)傳給第一模塊進(jìn)行處理,這樣可使數(shù)據(jù)在收發(fā)時(shí)有順序的進(jìn)行收發(fā),可以實(shí)現(xiàn)快速的數(shù)據(jù)收發(fā),需要說明的是,第一收發(fā)模塊和第二收發(fā)模塊是互不干擾的。
13:當(dāng)所述第一收發(fā)模塊和所述第二收發(fā)模塊接收數(shù)據(jù)時(shí),使所述收發(fā)副線程對(duì)所述第一收發(fā)模塊和所述第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且在所述數(shù)據(jù)校驗(yàn)通過時(shí),將所述數(shù)據(jù)發(fā)送至應(yīng)用主線程;
不管是第一收發(fā)模塊收發(fā)還是第二收發(fā)模塊進(jìn)行收發(fā),都會(huì)在收發(fā)過程中,導(dǎo)致數(shù)據(jù)出現(xiàn)異?;蚴窃獾狡茐牡那闆r,為了保護(hù)數(shù)據(jù)的完整性和健壯性,在接收到數(shù)據(jù)時(shí),利用收發(fā)副線程進(jìn)行數(shù)據(jù)的校驗(yàn),而實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)是通過在數(shù)據(jù)的尾部添加循環(huán)冗余校驗(yàn)碼,通過校驗(yàn)此校驗(yàn)碼來實(shí)現(xiàn)數(shù)據(jù)的完整性,當(dāng)數(shù)據(jù)校驗(yàn)不通過時(shí),則丟棄此數(shù)據(jù),再對(duì)其他數(shù)據(jù)進(jìn)行校驗(yàn),知道數(shù)據(jù)校驗(yàn)成功,再將成功的數(shù)據(jù)返回給上層應(yīng)用,再將成功數(shù)據(jù)重寫入模塊中,排出數(shù)據(jù)異常,達(dá)到一個(gè)數(shù)據(jù)最新,多份數(shù)據(jù)備份的效果,充分保障數(shù)據(jù)的健壯性。
在本發(fā)明實(shí)施例中,當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速發(fā)送,提高了數(shù)據(jù)的發(fā)送效率,節(jié)省了時(shí)間,并且收發(fā)完成后還對(duì)數(shù)據(jù)進(jìn)行安全校驗(yàn),達(dá)到數(shù)據(jù)不丟失的效果。
請(qǐng)參閱圖3,圖3是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中雙線程配合發(fā)送數(shù)據(jù)的流程圖,具體的,步驟12包括:
121:當(dāng)所述應(yīng)用主線程需要發(fā)送數(shù)據(jù)時(shí),使所述應(yīng)用主線程發(fā)送執(zhí)行消息給預(yù)設(shè)消息列表,并將所述數(shù)據(jù)拷貝到一級(jí)緩存;
預(yù)設(shè)消息列表預(yù)先創(chuàng)建好的,用來存儲(chǔ)主線程發(fā)送的消息的。執(zhí)行消息和應(yīng)用主線程要發(fā)送的數(shù)據(jù)是一一對(duì)應(yīng)的,方便收發(fā)副線程通過查找到執(zhí)行消息時(shí)而對(duì)應(yīng)到數(shù)據(jù)。應(yīng)用主線程將數(shù)據(jù)拷貝到一級(jí)緩存中,目的是為隔離應(yīng)用的內(nèi)存數(shù)據(jù),降低高頻收發(fā)過程中對(duì)應(yīng)用內(nèi)存的長時(shí)間鎖定。
122:使所述收發(fā)副線程根據(jù)先進(jìn)先出算法,從所述預(yù)設(shè)消息列表提取消息并將所述一級(jí)緩存中的與提取到的消息相對(duì)應(yīng)的所述數(shù)據(jù)拷貝到二級(jí)緩存中,消除所述執(zhí)行消息;
需要說明的是,收發(fā)副線程會(huì)在空閑的時(shí)候查詢預(yù)設(shè)消息列表,并不是時(shí)刻查詢。收發(fā)副線程將數(shù)據(jù)從一級(jí)緩存中拷貝到二級(jí)緩存中的目的是為中轉(zhuǎn)運(yùn)送數(shù)據(jù),降低底層對(duì)應(yīng)用數(shù)據(jù)內(nèi)存的耦合度。拷貝之后消除所述執(zhí)行消息是為了保證預(yù)設(shè)消息列表一直保持著最新狀態(tài),不存在沒用的消息。
123:使所述收發(fā)副線程根據(jù)第一收發(fā)模塊和第二收發(fā)模塊的處理優(yōu)先級(jí)原則和空閑原則依次將二級(jí)緩存中的所述數(shù)據(jù)拷貝到第一收發(fā)模塊或者第二收發(fā)模塊中進(jìn)行發(fā)送數(shù)據(jù);
通過將一個(gè)數(shù)據(jù)從一級(jí)緩存拷貝到二級(jí)緩存,再從二級(jí)緩存中拷貝到收發(fā)模塊中進(jìn)行收發(fā),達(dá)到將數(shù)據(jù)進(jìn)行一個(gè)排序的過程,使數(shù)據(jù)有次序的、有時(shí)間間隔的進(jìn)行完成發(fā)送,這樣降低了應(yīng)用主線程對(duì)收發(fā)模塊的耦合度,提高了應(yīng)用游戲操作的流暢程度。
在本發(fā)明實(shí)施例中,通過當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),先將數(shù)據(jù)拷貝到一級(jí)緩存中,收發(fā)副線程再將數(shù)據(jù)從一級(jí)緩存中拷貝到二級(jí)緩存中,再將數(shù)據(jù)從二級(jí)緩存中拷貝到收發(fā)模塊中進(jìn)行處理,這樣使數(shù)據(jù)在緩存中形成了中轉(zhuǎn)的過程,使數(shù)據(jù)達(dá)到了一個(gè)排列的過程,這樣降低了應(yīng)用主線程對(duì)收發(fā)模塊的耦合度,提高了應(yīng)用游戲操作的流暢程度。
請(qǐng)參閱圖4,圖4是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中單模塊收發(fā)算法的流程圖,具體的,步驟123包括:
1231:從所述二級(jí)緩存中提取一數(shù)據(jù),在所述一數(shù)據(jù)的頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),并且將所述一數(shù)據(jù)作為待收數(shù)據(jù);
對(duì)數(shù)據(jù)進(jìn)行編號(hào)標(biāo)識(shí),是為了對(duì)數(shù)據(jù)的辨別,同時(shí)也對(duì)校驗(yàn)時(shí)方便對(duì)正確數(shù)據(jù)和錯(cuò)誤數(shù)據(jù)的區(qū)分,防止混淆,丟失錯(cuò)誤。
1232:判斷所述第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑;
1233:當(dāng)所述第一收發(fā)模塊和第二收發(fā)模塊只存在一個(gè)空閑的收發(fā)模塊,將所述待收數(shù)據(jù)發(fā)送至空閑的收發(fā)模塊,由空閑的收發(fā)模塊進(jìn)行收發(fā)處理,或者,當(dāng)所述第一收發(fā)模塊和第二收發(fā)模塊均空閑時(shí),將所述待收數(shù)據(jù)發(fā)送至第二收發(fā)模塊,由所述第二收發(fā)模塊進(jìn)行收發(fā)處理;
由于在對(duì)模塊進(jìn)行劃分時(shí),將第二收發(fā)模塊的處理優(yōu)先級(jí)設(shè)置為高于第一收發(fā)模塊,所以當(dāng)?shù)诙瞻l(fā)模塊空閑時(shí),先第二收發(fā)模塊進(jìn)行處理。
1234:當(dāng)所述第一收發(fā)模塊或者第二收發(fā)模塊完成對(duì)所述一數(shù)據(jù)的接收處理之后,從所述二級(jí)緩存中提取下一數(shù)據(jù),并且所述下一個(gè)數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照所述數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增,將所述一下數(shù)據(jù)作為待收數(shù)據(jù),并且返回判斷所述第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑的步驟;
通過使用一個(gè)收發(fā)模塊進(jìn)行對(duì)數(shù)據(jù)的處理,避免了每次寫模塊都需要執(zhí)行一次收發(fā)模塊的操作,大大提升了數(shù)據(jù)收發(fā)速度,提高了模塊的使用率。
在本發(fā)明實(shí)施例中,通過當(dāng)所述主線程按順序的將數(shù)據(jù)一個(gè)一個(gè)的發(fā)送至收發(fā)模塊進(jìn)行處理,并使用一個(gè)收發(fā)模塊執(zhí)行,這樣既提高了游戲操作流暢程度,又避免了每次寫模塊都需要執(zhí)行一次收發(fā)模塊的操作,大大提升了數(shù)據(jù)收發(fā)速度,提高了模塊的使用率。
請(qǐng)參閱圖5,圖5是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的方法的第二實(shí)施方式中雙模塊收發(fā)算法的流程圖,具體的,步驟12還包括:
124:從所述二級(jí)緩存中提取第一數(shù)據(jù),在所述第一數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí);
同樣,對(duì)數(shù)據(jù)進(jìn)行編號(hào)標(biāo)識(shí),是為了對(duì)數(shù)據(jù)的辨別,同時(shí)也對(duì)校驗(yàn)時(shí)方便對(duì)正確數(shù)據(jù)和錯(cuò)誤數(shù)據(jù)的區(qū)分,防止混淆,丟失錯(cuò)誤。
125:將所述第一數(shù)據(jù)分配到第二收發(fā)模塊進(jìn)行處理;
126:從所述二級(jí)緩存中提取第二數(shù)據(jù),在所述第二數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),其中,在所述第二數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第一數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;
127:判斷所述第二數(shù)據(jù)和所述第一數(shù)據(jù)是否是相同數(shù)據(jù);
128:如果相同,則分配到第二收發(fā)模塊進(jìn)行處理;
129:如不同,則分配到第一收發(fā)模塊進(jìn)行處理;
120:從所述二級(jí)緩存中提取第三數(shù)據(jù),在所述第三數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第二數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;
1201:判斷所述第三數(shù)據(jù)與所述第一數(shù)據(jù)和所述第二數(shù)據(jù)是否是相同數(shù)據(jù);
1202:如與所述第一數(shù)據(jù)和所述第二數(shù)據(jù)中的其中一個(gè)是相同數(shù)據(jù),將所述第三數(shù)據(jù)分配到與之相同的數(shù)據(jù)進(jìn)行收發(fā)的收發(fā)模塊一同收發(fā);
1203:如與兩者都不同,則等待第一收發(fā)模塊和第二發(fā)收模塊處于空閑再進(jìn)行處理;
將相同的數(shù)據(jù)使用同一個(gè)收發(fā)模塊進(jìn)行處理,不相同的數(shù)據(jù)分配到另一個(gè)收發(fā)模塊進(jìn)行處理,這樣可以減少模塊的寫入次數(shù),提升收發(fā)模塊收發(fā)數(shù)據(jù)的速度。
在本發(fā)明實(shí)施例中,通過第一收發(fā)模塊和第二收發(fā)模塊之間的相互配合,在從二級(jí)緩存中提取數(shù)據(jù)時(shí),先判斷此數(shù)據(jù)和之前的數(shù)據(jù)是否相同,如有相同則分配到同一個(gè)收發(fā)模塊進(jìn)行處理,這樣減少了模塊的寫入次數(shù),提升了收發(fā)模塊收發(fā)數(shù)據(jù)的速度。
請(qǐng)參閱圖6,圖6是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的裝置的第一實(shí)施方式的示意圖。所述游戲手柄設(shè)置有第一收發(fā)模塊和第二收發(fā)模塊,游戲手柄快速收發(fā)數(shù)據(jù)的裝置20包括:構(gòu)建模塊21、發(fā)送模塊22和校驗(yàn)?zāi)K23。構(gòu)建模塊21,用于為所述游戲手柄構(gòu)建應(yīng)用主線程和收發(fā)副線程;發(fā)送模塊22,用于當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù);校驗(yàn)?zāi)K23,用于當(dāng)所述第一收發(fā)模塊和所述第二收發(fā)模塊接收數(shù)據(jù)時(shí),所述收發(fā)副線程對(duì)所述第一收發(fā)模塊和所述第二收發(fā)模塊接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且在所述數(shù)據(jù)校驗(yàn)通過時(shí),將所述數(shù)據(jù)發(fā)送至應(yīng)用主線程。
在本發(fā)明實(shí)施例中,當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速發(fā)送,提高了數(shù)據(jù)的發(fā)送效率,節(jié)省了時(shí)間,并且收發(fā)完成后還對(duì)數(shù)據(jù)進(jìn)行安全校驗(yàn),達(dá)到數(shù)據(jù)不丟失的效果。
請(qǐng)參閱圖7,圖7是本發(fā)明提供的一種數(shù)據(jù)快速收發(fā)的裝置的第二實(shí)施方式的示意圖,此實(shí)施方式中的模塊21-23與第一實(shí)施方式中的模塊21-23是相同的,此處不再一一贅述。具體的,發(fā)送模塊22包括:發(fā)送單元221、第一提取單元222、拷貝單元223、第二提取單元224、第一分配單元225、第三提取單元226、第一判斷單元227、第二分配單元228、第三分配單元229、第四提取單元220、第二判斷單元2201、第四分配單元2202和第五分配單元2203。發(fā)送單元221,用于當(dāng)所述應(yīng)用主線程需要發(fā)送數(shù)據(jù)時(shí),使所述應(yīng)用主線程發(fā)送執(zhí)行消息給預(yù)設(shè)消息列表,并將所述數(shù)據(jù)拷貝到一級(jí)緩存;第一提取單元222,用于使所述收發(fā)副線程根據(jù)先進(jìn)先出算法,從所述預(yù)設(shè)消息列表提取消息并將所述一級(jí)緩存中的與提取到的消息相對(duì)應(yīng)的所述數(shù)據(jù)拷貝到二級(jí)緩存中,消除所述執(zhí)行消息;拷貝單元223,用于使所述收發(fā)副線程根據(jù)第一收發(fā)模塊和第二收發(fā)模塊的處理優(yōu)先級(jí)原則和空閑原則依次將二級(jí)緩存中的所述數(shù)據(jù)拷貝到第一收發(fā)模塊或者第二收發(fā)模塊中進(jìn)行發(fā)送數(shù)據(jù);第二提取單元224,用于從所述二級(jí)緩存中提取第一數(shù)據(jù),在所述第一數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí);第一分配單元225,用于將所述第一數(shù)據(jù)分配到第二收發(fā)模塊進(jìn)行處理;第三提取單元226,用于從所述二級(jí)緩存中提取第二數(shù)據(jù),在所述第二數(shù)據(jù)頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),其中,在所述第二數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第一數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;第一判斷單元227,用于判斷所述第二數(shù)據(jù)和所述第一數(shù)據(jù)是否是相同數(shù)據(jù);第二分配單元228,用于如果所述第二數(shù)據(jù)和所述第一數(shù)據(jù)相同,則分配到第二收發(fā)模塊進(jìn)行處理;第三分配單元229,用于如所述第二數(shù)據(jù)和所述第一數(shù)據(jù)不同,則分配到第一收發(fā)模塊進(jìn)行處理;第四提取單元220,用于從所述二級(jí)緩存中提取第三數(shù)據(jù),在所述第三數(shù)據(jù)頭部加入的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照第二數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增;第二判斷單元2201,用于判斷所述第三數(shù)據(jù)與所述第一數(shù)據(jù)和所述第二數(shù)據(jù)是否是相同數(shù)據(jù);第四分配單元2202,用于如與所述第一數(shù)據(jù)和所述第二數(shù)據(jù)中的其中一個(gè)是相同數(shù)據(jù),將所述第三數(shù)據(jù)分配到與之相同的數(shù)據(jù)進(jìn)行收發(fā)的收發(fā)模塊一同收發(fā);第五分配單元2203,用于如與兩者都不同,則等待第一收發(fā)模塊和第二發(fā)收模塊處于空閑再進(jìn)行處理。
具體的,所述拷貝單元223包括:第一提取子單元2231、判斷子單元2232、發(fā)送子單元2233和第二提取子單元2234。第一提取子單元2231,用于從所述二級(jí)緩存中提取一數(shù)據(jù),在所述一數(shù)據(jù)的頭部加入數(shù)據(jù)編號(hào)標(biāo)識(shí),并且將所述一數(shù)據(jù)作為待收數(shù)據(jù);判斷子單元2232,用于判斷所述第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑;發(fā)送子單元2233,用于當(dāng)所述第一收發(fā)模塊和第二收發(fā)模塊只存在一個(gè)空閑的收發(fā)模塊,將所述待收數(shù)據(jù)發(fā)送至空閑的收發(fā)模塊,由空閑的收發(fā)模塊進(jìn)行收發(fā)處理,或者,當(dāng)所述第一收發(fā)模塊和第二收發(fā)模塊均空閑時(shí),將所述待收數(shù)據(jù)發(fā)送至第二收發(fā)模塊,由所述第二收發(fā)模塊進(jìn)行收發(fā)處理;第二提取子單元2234,用于當(dāng)所述第一收發(fā)模塊或者第二收發(fā)模塊完成對(duì)所述一數(shù)據(jù)的接收處理之后,從所述二級(jí)緩存中提取下一數(shù)據(jù),并且所述下一個(gè)數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)按照所述數(shù)據(jù)的數(shù)據(jù)編號(hào)標(biāo)識(shí)進(jìn)行遞增,將所述一下數(shù)據(jù)作為待收數(shù)據(jù),并且返回判斷所述第一收發(fā)模塊和第二收發(fā)模塊是否存在空閑的步驟。
具體的,所述校驗(yàn)?zāi)K23包括:添加單元231,用于在收發(fā)數(shù)據(jù)之前在數(shù)據(jù)的尾部均添加循環(huán)冗余校驗(yàn)碼。
在本發(fā)明實(shí)施例中,當(dāng)所述主線程需要發(fā)送數(shù)據(jù)時(shí),使所述收發(fā)副線程通過所述第一收發(fā)模塊和所述第二收發(fā)模塊的相互配合進(jìn)行發(fā)送所述數(shù)據(jù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速發(fā)送,提高了數(shù)據(jù)的發(fā)送效率,節(jié)省了時(shí)間,并且收發(fā)完成后還對(duì)數(shù)據(jù)進(jìn)行安全校驗(yàn),達(dá)到數(shù)據(jù)不丟失的效果。
請(qǐng)參閱圖8,圖8是本發(fā)明執(zhí)行數(shù)據(jù)快速收發(fā)的方法的游戲手柄的示意圖。游戲手柄30包括:一個(gè)或多個(gè)處理器301以及存儲(chǔ)器302,圖6中以一個(gè)處理器301為例。
處理器301和存儲(chǔ)器302可以通過總線或者其他方式連接,圖8中以通過總線連接為例。
存儲(chǔ)器302作為一種非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),可用于存儲(chǔ)非易失性軟件程序、非易失性計(jì)算機(jī)可執(zhí)行程序以及模塊,如本發(fā)明實(shí)施例中的數(shù)據(jù)快速收發(fā)的方法對(duì)應(yīng)的程序指令/模塊(例如,構(gòu)建模塊21、發(fā)送模塊22和校驗(yàn)?zāi)K23)。處理器301通過運(yùn)行存儲(chǔ)在存儲(chǔ)器302中的非易失性軟件程序、指令以及模塊,從而執(zhí)行服務(wù)器的各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述方法實(shí)施例數(shù)據(jù)快速收發(fā)的方法。
存儲(chǔ)器302可以包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需要的應(yīng)用程序;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)數(shù)據(jù)快速收發(fā)的裝置的使用所創(chuàng)建的數(shù)據(jù)等。此外,存儲(chǔ)器302可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤存儲(chǔ)器件、閃存器件、或其他非易失性固態(tài)存儲(chǔ)器件。在一些實(shí)施例中,存儲(chǔ)器302可選包括相對(duì)于處理器301遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過網(wǎng)絡(luò)連接至數(shù)據(jù)快速收發(fā)的裝置。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
所述一個(gè)或者多個(gè)模塊存儲(chǔ)在所述存儲(chǔ)器302中,當(dāng)被所述一個(gè)或者多個(gè)處理器301執(zhí)行時(shí),執(zhí)行上述任意方法實(shí)施例中數(shù)據(jù)快速收發(fā)的方法,例如,執(zhí)行以上描述的圖2中的方法步驟11至步驟13,圖3中的方法步驟121至步驟123,圖4中的方法步驟1231至步驟1234,圖5中的方法步驟121至步驟1203,實(shí)現(xiàn)圖6中的模塊21-23。
上述產(chǎn)品可執(zhí)行本發(fā)明實(shí)施例所提供的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。未在本實(shí)施例中詳盡描述的技術(shù)細(xì)節(jié),可參見本發(fā)明實(shí)施例所提供的方法。
以上所述僅為本發(fā)明的實(shí)施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。