上海交通大学网络教育学院--计算机专业--操作系统作业---操作系统实验报告_进程与进程通信
18)
19)
20)
21)
22)
23)
24)
25)
26)
27)
28)
29)
30)
31)
32)
33)
34)
35)
36) BOOL GetMsgQInfo(PDWORD msgSize, PDWORD msgCnt); BOOL Send(LPVOID buf,int whichProcess, DWORD waitTime=INFINITE); BOOL Receive(LPVOID buf, DWORD waitTime=INFINITE); int Read(char **ReadMailBox); private: PMSGQ_HEADER pMsgInfo; HANDLE m_hMutex; HANDLE m_SemaphoreSend; //发送信号量 HANDLE m_SemaphoreReceive; //接收信号量 HANDLE m_hFileMap; //文件映像句柄 LPVOID m_hViewBuf; //文件映像映射到地址空间的首地址 LPCTSTR **strName; int nowProcess; DWORD *msgSize; int *msgCnt; };
5.4.2、 创建函数实现
1) BOOL CMsgQ::Create(LPCTSTR **strname,int nowprocess,int maxprocess,int
*msgmaxcount,DWORD *msgsize)
2) {
3) int i,j;
4) strName = new LPCTSTR * [maxprocess];
5) for( i=0 ;i<maxprocess ;i++)
6) strName[i] = new LPCTSTR [4];
7) for( i=0 ;i<maxprocess; i++)
8) for(j=0 ;j<4 ;j++)
9) strName[i][j]=strname[i][j];
10) nowProcess = nowprocess;
11) msgSize = new DWORD [maxprocess];
12) for( i=0 ;i<maxprocess ;i++)
13) msgSize[i]=msgsize[i];
14) msgCnt = new int [maxprocess];
15) for( i=0 ;i<maxprocess ;i++)
16) msgCnt[i]=msgmaxcount[i];
17) //先创建文件映像
18) m_hMutex = CreateMutex(NULL, false, strname[nowProcess][MutexEnum]); 19)
20) m_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
21) PAGE_READWRITE,0,sizeof(_MSGQ_HEADER)+