两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種進程間通信方法及裝置制造方法

文檔序號:6640402閱讀:303來源:國知局
一種進程間通信方法及裝置制造方法
【專利摘要】本申請?zhí)峁┝艘环N進程間通信方法及裝置,該方法包括:當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列,將數據直接寫入Boost消息隊列,當第二進程端設置的接收模塊接收到寫有數據的Boost消息隊列時,提取其中的數據,并將提取的數據發(fā)送至第二進程。與現有技術相比,本發(fā)明實施例并未將第一進程的數據直接放入共享內存,而是將數據寫入Boost消息隊列中,利用Boost消息隊列實現第一進程將數據通信至第二進程。因而在開發(fā)過程中并不需要控制讀寫同步問題,開發(fā)過程更加簡單。
【專利說明】一種進程間通信方法及裝置

【技術領域】
[0001]本發(fā)明涉及通信【技術領域】,尤其是一種進程間通信方法及裝置。

【背景技術】
[0002]不同進程之間需要進行通信,例如一個進程向另一進程發(fā)送數據,或者接收另一進程發(fā)送的數據?,F有技術中,不同進程之間的通信方式是共享內存的方式,即在內存中設置共享區(qū)域,當一個進程需要向另一進程發(fā)送數據時,將該數據寫入至該共享內存區(qū)域中,當寫入完畢后,向另一進程發(fā)送通知,以告知該另一進程可以讀取共享內存區(qū)域,或者,修改內存特征值,當另一進程監(jiān)測到內存特征值被修改后,可以讀取共享內存區(qū)域。
[0003]然而,上述基于共享內存的進程通信方式,需要控制進程間的讀寫同步,開發(fā)過程較為復雜。


【發(fā)明內容】

[0004]有鑒于此,本發(fā)明提供了一種進程間通信方法及裝置,用以解決現有技術中進程間通信方法開發(fā)過程復雜的技術問題。為實現所述目的,本發(fā)明提供的技術方案如下:
[0005]一種進程間通信方法,包括:
[0006]當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列;
[0007]將所述數據寫入所述Boost消息隊列;
[0008]當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
[0009]可選地,所述將所述數據寫入所述Boost消息隊列包括:
[0010]確定所述數據的長度及所述Boost消息隊列的預設單消息長度;
[0011]當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據;
[0012]將所述多個切片數據寫入所述Boost消息隊列。
[0013]可選地,所述將所述多個切片數據寫入所述Boost消息隊列包括:
[0014]依據切片順序,將所述多個切片數據寫入所述Boost消息隊列。
[0015]可選地,在對所述數據進行切片,獲得多個切片數據之后,還包括:
[0016]統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
[0017]可選地,所述當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程包括:
[0018]當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數;
[0019]拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
[0020]本申請?zhí)峁┝艘环N進程間通信裝置,包括:
[0021]消息隊列獲取模塊,用于當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列;
[0022]消息隊列寫入模塊,用于將所述數據寫入所述Boost消息隊列;
[0023]進程數據提取模塊,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
[0024]可選地,所述消息隊列寫入模塊包括:
[0025]長度確定子模塊,用于確定所述數據的長度及所述Boost消息隊列的預設單消息長度;
[0026]數據切片子模塊,用于當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據;
[0027]數據寫入子模塊,用于將所述多個切片數據寫入所述Boost消息隊列。
[0028]可選地,所述數據寫入子模塊包括:
[0029]順序寫入單元,用于依據切片順序,將所述多個切片數據寫入所述Boost消息隊列。
[0030]可選地,所述消息隊列寫入模塊還包括:
[0031]個數寫入子模塊,用于在對所述數據進行切片,獲得多個切片數據之后,統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
[0032]可選地,所述進程數據提取模塊包括:
[0033]數據提取子模塊,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數;
[0034]數據拼接子模塊,用于拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
[0035]由以上方案可知,本申請的有益效果是:
[0036]本發(fā)明提供了一種進程間通信方法及裝置,該方法包括:當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列,將數據直接寫入Boost消息隊列,當第二進程端設置的接收模塊接收到寫有數據的Boost消息隊列時,提取其中的數據,并將提取的數據發(fā)送至第二進程。與現有技術相比,本發(fā)明實施例并未將第一進程的數據直接放入共享內存,而是將數據寫入Boost消息隊列中,利用Boost消息隊列實現第一進程將數據通信至第二進程。因而在開發(fā)過程中并不需要控制讀寫同步問題,開發(fā)過程更加簡單。

【專利附圖】

【附圖說明】
[0037]為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
[0038]圖1為本發(fā)明實施例提供的進程間通信方法的流程圖;
[0039]圖2為本發(fā)明實施例提供的發(fā)送模塊及接收模塊的示意圖;
[0040]圖3為本發(fā)明另一實施例提供的進程間通信方法的部分流程圖;
[0041]圖4為本發(fā)明實施例提供的進程間通信裝置的結構框圖;
[0042]圖5為本發(fā)明另一實施例提供的進程間通信裝置的部分結構框圖。

【具體實施方式】
[0043]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0044]參照圖1,其揭示出了本發(fā)明實施例提供的進程間通信方法的流程,具體包括以下流程:
[0045]步驟SlOl:當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列。
[0046]其中,當第一進程生成數據且需要將該數據發(fā)送至第二進程時,則獲取預先創(chuàng)建的Boost消息隊列。Boost消息隊列用于將數據發(fā)送至第二進程。
[0047]步驟S102:將所述數據寫入所述Boost消息隊列。
[0048]本實施例中,將數據直接寫入Boost消息隊列即可,Boost消息隊列的自身可以實現將數據發(fā)送至第二進程端,其中,第二進程端預先設置有接收模塊,用于執(zhí)行下一步驟。
[0049]步驟S103:當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
[0050]其中,當第二進程端的接收模塊接收到寫有數據的Boost消息隊列時,接收模塊提取其中的數據,并將提取到的數據發(fā)送至第二進程,從而完成第一進程向第二進程發(fā)送數據的過程。如圖2所示,在第一進程端設置有發(fā)送模塊,Boost消息隊列調用發(fā)送模塊實現數據的發(fā)送,在第二進程端設置有接收模塊,接收模塊實現數據的接收,從而完成不同進程的通信。
[0051]本實施例中,接收模塊可以實時監(jiān)測是否有消息隊列發(fā)送到自身,或者,接收模塊并不進行監(jiān)測,而是消息隊列到達后觸發(fā)接收模塊,則被觸發(fā)的接收模塊提取其中的數據。
[0052]由以上的技術方案可知,本實施例提供的進程間通信方法包括:當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列,直接將數據寫入Boost消息隊列中,利用Boost消息隊列自身的機制實現將數據發(fā)往第二進程端,當第二進程端設置的接收模塊接收到寫有數據的Boost消息隊列時,提取其中的數據,并將提取的數據發(fā)送至第二進程。
[0053]簡單而言,本發(fā)明實施例在第一進程端以寫模式創(chuàng)建Boost消息隊列,在第二進程端以讀模式打開該消息隊列。第一進程端在Boost消息隊列中寫入數據,第二進程端讀取其中的數據。與現有技術相比,本發(fā)明實施例并未將第一進程的數據直接放入共享內存,而是利用Boost消息隊列將數據發(fā)送至第二進程。這樣,本發(fā)明實施例在開發(fā)過程中并不需要控制進程間訪問共享內存時的讀寫同步操作,開發(fā)過程更加簡單。
[0054]需要說明的是,兩個進程是在同一臺設備中,且并不限定設備使用的平臺類型,可以是Linux平臺,也可以是Windows平臺。另外,第一進程向第二進程發(fā)送的進程數據可以為調用數據,該調用數據觸發(fā)第二進程向第一進程發(fā)送進程數據,從而實現第一進程對第二進程的調用。當然,第二進程向第一進程發(fā)送進程數據的方式可以是本發(fā)明實施例提供的進程間通信方法。
[0055]創(chuàng)建消息隊列時,需要設置消息隊列中單個消息的長度。在內存總量較小且性能要求較低的情況下,可以設置較小的消息長度值,需要說明,消息長度的具體數值可以根據實際的進程交互數據大小而定,本發(fā)明中各個實施例并不做限定。當設置的消息長度較小,而待發(fā)送的數據量較大時,需要將數據進行切片。也即,如圖3所示,上述實施例中,將數據寫入Boost消息隊列的具體實現方式可以是:
[0056]步驟S201:確定所述數據的長度及所述Boost消息隊列的預設單消息長度。
[0057]其中,創(chuàng)建Boost消息隊列時,預先設置單個消息的長度值,用以限制消息隊列中每個消息的大小。
[0058]步驟S202:當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據。
[0059]也就是說,當數據的長度較大時,以預設單消息長度為單位,將數據切分為多個數據。例如,單消息長度為10K,數據為200K大小,則將數據切分為20個10K大小的切片數據。
[0060]需要說明的是,即使切分的最后一部分數據小于單消息長度時,也將該部分數據作為一個切片數據。例如,單消息長度為10K,進程消息為205K大小,則將數據切分為21個切片數據,其中包括一個5K的切片數據。
[0061]步驟S203:將所述多個切片數據寫入所述Boost消息隊列。
[0062]其中,可以為每個切片數據設置對應的順序標識,將多個設置有順序標識的切片數據寫入Boost消息隊列?;蛘?,直接依據切片順序,將多個切片數據寫入Boost消息隊列。在同一消息隊列中的多個切片進程具有相同的進程標識,該進程標識為發(fā)送進程的標識即第一進程標識。
[0063]在該種實現方式中,消息隊列中包含多個切片數據。第二進程端接收模塊接收到消息隊列后,需要依次提取多個切片數據,并拼接為完整的數據。為了保證接收模塊準確提取到全部的切片數據,可以在Boost消息隊列中寫入切片數據的個數。即:
[0064]在對所述數據進行切片,獲得多個切片數據之后,統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
[0065]因此,封裝的Boost消息隊列中包含有切片數據的個數。當第二進程端接收到Boost消息隊列時,可以依據提取到的切片數據的個數,進行數據的提取。具體地:
[0066]當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數;拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
[0067]若切片數據具有順序標識,則將提取到的切片數據按照順序標識進行拼接;若切片數據并無標識,而是按照切片順序寫入Boost消息隊列時,可以依次提取并依次拼接,拼接獲得的數據為完整的數據。
[0068]下面對本發(fā)明實施例提供的進程間通信裝置進行說明,需要說明的是,以下對本發(fā)明實施例提供的進程間通信裝置的介紹可以與上文的進程間通信方法相互參照。
[0069]參照圖4,其示出了本發(fā)明實施例提供的進程間通信裝置的結構,具體包括:消息隊列獲取模塊100、消息隊列寫入模塊200及進程數據提取模塊300 ;其中:
[0070]消息隊列獲取模塊100,用于當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列;
[0071]消息隊列寫入模塊200,用于將所述數據寫入所述Boost消息隊列;
[0072]進程數據提取模塊300,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
[0073]由以上的技術方案可知,本實施例提供的進程間通信裝置中,當第一進程生成數據時,消息隊列獲取模塊100獲取預先創(chuàng)建的Boost消息隊列,消息隊列寫入模塊200直接將數據寫入Boost消息隊列中,當接收到寫有數據的Boost消息隊列時,進程數據提取模塊300提取其中的數據,并將提取的數據發(fā)送至第二進程。與現有技術相比,本發(fā)明實施例并未將第一進程的數據放入共享內存,而是利用Boost消息隊列直接將數據發(fā)送至第二進程。這樣,本發(fā)明實施例并不需要進程間訪問共享內存時的讀寫同步操作,開發(fā)方式更加簡單。
[0074]需要說明,本實施例中的消息隊列獲取模塊100、消息隊列寫入模塊200可以認為是上述方法實施例中的發(fā)送模塊,集成在第一進程端,用于發(fā)送第一進程生成的數據,進程數據提取模塊300可以認為是上述方法實施例中的接收模塊,集成在第二進程端,用于接收數據。當然,第一進程端及第二進程端可均全部設置發(fā)送模塊及接收模塊,則每個進程既可以發(fā)送數據,也可以接收數據。
[0075]如圖5所示,其中,上述進程間通信裝置中的消息隊列寫入模塊200可以包括:長度確定子模塊201、數據切片子模塊202及數據寫入子模塊203。其中:
[0076]長度確定子模塊201,用于確定所述數據的長度及所述Boost消息隊列的預設單消息長度;
[0077]數據切片子模塊202,用于當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據;
[0078]數據寫入子模塊203,用于將所述多個切片數據寫入所述Boost消息隊列。
[0079]其中,上述進程間通信裝置中的數據寫入子模塊203可以包括:
[0080]順序寫入單元,用于依據切片順序,將所述多個切片數據寫入所述Boost消息隊列。
[0081]如圖5所示,可選地,上述的進程間通信裝置中的消息隊列寫入模塊200還可以包括:
[0082]個數寫入子模塊204,用于在對所述數據進行切片,獲得多個切片數據之后,統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
[0083]可選地,上述進程間通信裝置中的進程數據提取模塊300可以包括:
[0084]數據提取子模塊,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數;
[0085]數據拼接子模塊,用于拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
[0086]需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
[0087]還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括上述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0088]對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【權利要求】
1.一種進程間通信方法,其特征在于,包括: 當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列; 將所述數據寫入所述Boost消息隊列; 當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
2.根據權利要求1所述的進程間通信方法,其特征在于,所述將所述數據寫入所述Boost消息隊列包括: 確定所述數據的長度及所述Boost消息隊列的預設單消息長度; 當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據; 將所述多個切片數據寫入所述Boost消息隊列。
3.根據權利要求2所述的進程間通信方法,其特征在于,所述將所述多個切片數據寫入所述Boost消息隊列包括: 依據切片順序,將所述多個切片數據寫入所述Boost消息隊列。
4.根據權利要求2所述的進程間通信方法,其特征在于,在對所述數據進行切片,獲得多個切片數據之后,還包括: 統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
5.根據權利要求4所述的進程間通信方法,其特征在于,所述當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程包括: 當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數; 拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
6.一種進程間通信裝置,其特征在于,包括: 消息隊列獲取模塊,用于當第一進程生成數據時,獲取預先創(chuàng)建的Boost消息隊列; 消息隊列寫入模塊,用于將所述數據寫入所述Boost消息隊列; 進程數據提取模塊,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的數據并發(fā)送至第二進程。
7.根據權利要求6所述的進程間通信裝置,其特征在于,所述消息隊列寫入模塊包括: 長度確定子模塊,用于確定所述數據的長度及所述Boost消息隊列的預設單消息長度; 數據切片子模塊,用于當所述數據的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數據進行切片,獲得多個切片數據; 數據寫入子模塊,用于將所述多個切片數據寫入所述Boost消息隊列。
8.根據權利要求7所述的進程間通信裝置,其特征在于,所述數據寫入子模塊包括: 順序寫入單元,用于依據切片順序,將所述多個切片數據寫入所述Boost消息隊列。
9.根據權利要求7所述的進程間通信裝置,其特征在于,所述消息隊列寫入模塊還包括: 個數寫入子模塊,用于在對所述數據進行切片,獲得多個切片數據之后,統(tǒng)計所述切片數據的個數,并將統(tǒng)計的所述個數寫入所述Boost消息隊列。
10.根據權利要求9所述的進程間通信裝置,其特征在于,所述進程數據提取模塊包括: 數據提取子模塊,用于當接收到所述寫有數據的Boost消息隊列時,提取其中的切片數據,直至提取的切片數據的個數等于統(tǒng)計的所述個數; 數據拼接子模塊,用于拼接提取到的切片數據,并將拼接獲得的數據發(fā)送至第二進程。
【文檔編號】G06F9/54GK104503854SQ201410837300
【公開日】2015年4月8日 申請日期:2014年12月29日 優(yōu)先權日:2014年12月29日
【發(fā)明者】羅鷹, 李亮, 林康, 侯勇軍 申請人:成都科來軟件有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
赣州市| 丽水市| 大田县| 汉川市| 昭苏县| 托克托县| 江西省| 花垣县| 栖霞市| 和田市| 平昌县| 二连浩特市| 卢龙县| 双峰县| 宁国市| 黑水县| 金华市| 图木舒克市| 林甸县| 安阳市| 祁连县| 民权县| 翁牛特旗| 甘南县| 隆昌县| 和龙市| 陕西省| 巴青县| 石屏县| 葵青区| 兰考县| 阿瓦提县| 铁岭市| 南投市| 侯马市| 望江县| 安阳市| 临漳县| 兴仁县| 冕宁县| 台北县|