C 程序間通訊(windows)

2021-10-23 21:55:26 字數 3985 閱讀 6905

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允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標。通過使用這些指標,不同程序就可以讀或修改檔案的內容,實現了對檔案中資料的共享。應用程式有三種方法來使多個程序共享乙個檔案...