在VC 6 0下利用訊息實現內部程序通訊

2021-08-26 07:23:46 字數 1905 閱讀 7648

內部程序間通訊和資料交換有多種方式:訊息、共享記憶體、匿名(命名)管道、郵槽、windows套接字等多種技術。其中利用訊息機制實現ipc雖然同其他方法相比有交換的資料量小、攜帶的資訊少等缺點,但由於其實現方便、應用靈活而廣泛應用於無須大量、頻繁資料交換的內部程序通訊系統之中,尤其是對於在上層主控軟體與底層工作軟體之間的命令與響應上更能充分顯示其良好的效能。本文就通過編制乙個主控軟體和乙個受其操作的底層工作軟體來闡述如何用vc++6.0通過訊息來實現內部程序通訊。

一、windows訊息機制

windows是一種物件導向的體系結構,windows環境和應用程式都是通過訊息來互動的。windows應用程式開始執行後,windows為該程式建立乙個"訊息佇列(message queue)",用以存放郵寄給該程式可能建立的各種不同視窗的訊息。訊息佇列中訊息的結構(msg)為:

typedef struct tagmsgmsg;

其中第乙個成員變數是用以標識接收訊息的視窗的視窗控制代碼;第二個引數便是訊息標識號,如wm_paint;第三個和第四個引數的具體意義同message值有關,均為訊息引數。前四個引數是非常重要和經常用到的,至於後兩個引數則分別表示郵寄訊息的時間和游標位置(螢幕座標)。把訊息傳送到應用程式有兩種方法:一種是由系統將訊息"郵寄(post)"到應用程式的"訊息佇列"這是"進隊訊息"win32 api有對應的函式:

postmessage(),此函式不等待該訊息處理完就返回;而另一種則是由系統在直接呼叫視窗函式時將訊息"傳送(send)"給應用程式的視窗函式,屬於"不進隊訊息"對應的函式是sendmessage()其必須等待該訊息處理完後方可返回。

二、主控程式的實現

(2)第二步選取single document(單文件)。

(3)其餘幾步均為確省值。

(4)新增三個選單"命令一"、"命令二"、"命令三"及與之對應的函式:

onsendcomm1()

onsendcomm2()

onsendcomm3()

(5)在senderview.h中新增自定義訊息:#define wm_comm wm_user+100編譯完成即可。

三、底層工作程式的實現

(1)新建工程receiver、仍是單文件。

m_pmainwnd->setwindowtext("receiver");

用以指定底層工作程式的視窗標題,以便主控程式能根據標題獲取到此視窗的視窗控制代碼。

(3)在mainfrm.h中新增自定義訊息:#define wm_comm wm_user+100。

(4)新增自定義訊息wm_comm的訊息對映:

begin_message_map(cmainframe, cframewnd)

//}afx_msg_map

on_message(wm_comm,onsendmsg)

end_message_map()

(5)完成訊息響應函式onsendmsg()

void cmainframe::onsendmsg(wparam wparam, lparam lparam)

我們便可以通過辨別訊息的兩個訊息引數來區分主控程式傳送的是哪乙個命令從而可以執行相應的操作。執行主控程式和底層工作程式由於本程式採用的是sendmessage()所以當主控程式傳送訊息給底層工作程式時,底層工作程式彈出響應的模式對話方塊,在沒有關閉對話方塊前此訊息未處理完,sendmessage()也就沒有執行完,所以主控程式呈阻塞狀態,如改用posemessage()則不會發生阻塞,具體選用哪個函式還應根據實際要求靈活掌握。

結論:通過上面的例項可以看出利用訊息進行程序間通訊不失為一種便捷的方法,程序間的資料交換量不大卻能完成相當的功能,上下層次有著明顯的介面,上層和底層只通過這個介面進行通訊,因此只要對上下層程式制定好規範詳盡的協議便可編制出協調性很好的軟體控制系統。

程式設計高手 VC 6 0下利用訊息實現內部程序通訊

引言 內部程序間通訊和資料交換有訊息 共享 記憶體 匿名 命名 管道 郵槽 windows套接字等多種技術。其中利用訊息機制實現ipc雖然同其他方法相比有交換的資料量小 攜帶的資訊少等缺點,但由於其實現方便 應用靈活而廣泛應用於無須大量 頻繁資料交換的內部程序通訊系統之中,尤其是對於在上層主控 軟體...

在VC 6 0下設定GDI

2.在你將要使用gdi 的工程中,完成初始化工作 在stdafx.h中加入 define ulong ptr unsigned long include using namespace gdiplus include gdiplus.h gdiplusstartupinput m gdiplusst...

Lib USB 在vc6 0下的應用

2.通過vc建立乙個dialog。3.設定好介面 4.正式開始usb設定 5 program.include usb.h 這個標頭檔案是要包括的,裡面包含了必須要用到的資料結構 我們將乙個裝置的屬性用乙個結構體來概括 typedefstruct device descript 用來設定傳輸資料的時間...