1,共享記憶體;
2,管道;
3,訊號量
程序1測試**如下:
#include
#include
/*********************1 共享記憶體**********************/
handle myhmutex;
handle myhevent;
bool sharedmemoryfun()
;/*********************2 命名管道**********************/
#define my_pipe_name "\\\\.\\pipe\\mypipe"
bool pipefun()
;/*********************3 訊號量************************/
handle myhsemaphore;
bool semaphorefun()
;int
main()
system
("pause");
return0;
}bool sharedmemoryfun()
//對映
lpvoid lpbuf =
mapviewoffile
(myhandle,
file_map_all_access,0,
0,1024);
if(lpbuf ==
null
) myhmutex =
createmutex
(null
, false,
"mymutex");
myhevent =
createevent
(null
, false, false,
"myevent");
while
(true)
}closehandle
(myhevent)
;closehandle
(myhmutex)
;unmapviewoffile
(lpbuf)
;closehandle
(myhandle)
;return true;
}bool pipefun()
if(!connectnamedpipe
(myhpipe,
null))
while
(true)
char rbuf[
128]
; dword rs;if(
!readfile
(myhpipe, rbuf,
128,
&rs,
null))
else
}disconnectnamedpipe
(myhpipe)
;closehandle
(myhpipe)
;return true;
}bool semaphorefun()
std::cout<<
"wait releasesemaphore"
(10500);
releasesemaphore
(myhsemaphore,1,
null);
while(1
)closehandle
(myhsemaphore)
;return true;
}
程序2測試**如下:
#include
#include
/*********************1 共享記憶體**********************/
handle myhmutex;
handle myhevent;
bool sharedmemoryfun()
;/*********************2 命名管道**********************/
#define my_pipe_name "\\\\.\\pipe\\mypipe"
bool pipefun()
;/*********************3 訊號量************************/
handle myhsemaphore;
bool semaphorefun()
;int
main()
system
("pause");
return0;
}bool sharedmemoryfun()
//對映
lpvoid lpbuf =
mapviewoffile
(myhandle,
file_map_all_access,0,
0,0)
;if(lpbuf ==
null
) myhmutex =
openmutex
(mutex_all_access, false,
"mymutex");
if(myhmutex ==
null
) myhevent =
openevent
(event_all_access, false,
"myevent");
if(myhevent ==
null
)while
(true)
/*if (buf[0] == '1')
closehandle
(myhevent)
;closehandle
(myhmutex)
;unmapviewoffile
(lpbuf)
;closehandle
(myhandle)
;return true;
}bool pipefun()
handle myhpipe =
createfile
(my_pipe_name,
generic_read |
//物件的訪問方式:讀訪問
generic_write,
//物件的訪問方式:寫訪問0,
//物件是否共享:0表示不共享
null
,//指向乙個security_attributes結構的指標
open_existing,
//物件的建立方式:open_existing表示開啟物件(管道)
file_attribute_normal,
//設定物件的屬性和標誌
null);
if(myhpipe == invalid_handle_value)
while
(true)
else
char wbuf[
128]
; std::cout<<
"*************send message**********************"
getline
(wbuf,
128)
; dword wr;if(
!writefile
(myhpipe, wbuf,
128,
&wr,
null))
}closehandle
(myhpipe)
;return true;
}bool semaphorefun()
std::cout<<
"waiting "
(myhsemaphore, infinite)
; std::cout<<
"had waited "
(myhsemaphore)
;return true;
}
windows程序間通訊
摘 要 隨著人們對應用程式的要求越來越高,單程序應用在許多場合已不能滿足人們的要求。編寫多程序 多執行緒程式成為現代程式設計的乙個重要特點,在多程序程式設計中,程序間的通訊是不可避免的。microsoft win32 api 提供了多種程序間通訊的方法,全面地闡述了這些方法的特點,並加以比較和分析,...
Windows下程序間通訊
1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...
Windows程序間通訊方式
align center windows程序間通訊方式 align 1 檔案對映 win32 api允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標。通過使用這些指標,不同程序就可以讀或修改檔案的內容,實現了對檔案中資料的共享。應用程式有三種方法來使多個程序共享乙個檔案...