一、程序間通訊的方式
程序間通訊的方式有很多,常用的有共享記憶體(記憶體對映檔案、共享記憶體dll、剪下板等)、命名管道和匿名管道、傳送訊息等幾種方法來直接完成,另外還可以通過
socket
口、配置檔案和登錄檔
等來間接實現程序間資料通訊任務。以上這幾種方法各有優缺點,具體到在程序間進行大資料量資料的快速交換問題上,則可以排除使用配置檔案和登錄檔的方法;另外,由於管道和
socket
二、傳送訊息實現程序間通訊前準備
下面的例子用到乙個windows api 32函式
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
要有此函式,需要新增using system.runtime.interopservices;命名空間
此方法各個引數表示的意義
wnd:接收訊息的視窗的控制代碼。如果此引數為hwnd_broadcast,則訊息將被傳送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但訊息不被傳送到子視窗。
msg:指定被傳送的訊息型別。
wp:訊息內容。
lp:指定附加的訊息指定資訊。
用api參考手冊檢視sendmessage用法時,參考手冊則提示
sendmessage與
postmessage之間的區別
:sendmessage
和postmessage
,這兩個函式雖然功能非常相似,都是負責向指定的視窗傳送訊息,但是
sendmessage
() 函式發出訊息後一直等到接收方的訊息響應函式處理完之後才能返回,並能夠得到返回值,在此期間傳送方程式將被阻塞,
sendmessage
() 後面的語句不能被繼續執行,即是說此方法是同步的。而
postmessage
() 函式在發出訊息後馬上返回,其後語句能夠被立即執行,但是無法獲取接收方的訊息處理返回值,即是說此方法是非同步的。
三、傳送訊息實現程序間通訊具體步驟
1.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication
(2)在form1上新增乙個標籤為textbox1的文字框,並為form1新增keydown事件,當form1接收到kewdown訊息時,將接收到的資料顯示在label1上。
public form1()
private void form1_keydown(object sender, keyeventargs e)
(3)編譯執行,生成processcommunication.exe
2.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication1,
並在form1上新增乙個按鈕和乙個文字框
namespace processcommunication1
//win32 api函式:
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
private void button1_click(object sender, eventargs e)
} }
}
}
3.啟動processcommunication.exe可執行檔案,彈出form1窗體稱為接受訊息窗體。
啟動processcommunication1.exe可執行檔案,在彈出的窗體中的文字框中輸入任意數字,點選button1按鈕,接受訊息窗體textbox1即顯示該數字。
到此結束。
C 程序間通訊
程序之間通訊的幾種方法 在windows程式中,各個程序之間常常需要交換資料,進行資料通訊。常用的方法有 使用記憶體對映檔案 通過共享記憶體dll共享記憶體 使用sendmessage向另一程序傳送wm copydata訊息 比起前兩種的複雜實現來,wm copydata訊息無疑是一種經濟實惠的一中...
C 實現程序間通訊
利用tcp ip 來實現,不過目前只能實現一對一你一句我一句的聊天。有兩個.c檔案,ser.c和cli.c redhat系統,需要的標頭檔案如下 include include include include include include include 伺服器int main 2 struct ...
C 程序間通訊(windows)
1,共享記憶體 2,管道 3,訊號量 程序1測試 如下 include include 1 共享記憶體 handle myhmutex handle myhevent bool sharedmemoryfun 2 命名管道 define my pipe name pipe mypipe bool p...