您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

win32下进程间通信方式之管道、邮件槽、剪切板、共享内存、消息、套接字、RPC、DDE等

phymat.nico 发布时间:2017-10-17 21:17:19 ,浏览量:1


#include "stdafx.h"

/*32位Windows采用虚拟内存技术使每个进程虚拟4G内存,在逻辑上实现了对进程之间数据代码的分离与保护。那么相应的进程之间的通信也就有必要整理掌握一下。
Windows进程间通讯的方法有很多:管道、邮件槽、剪切板、共享内存、消息、套接字、RPC、DDE等。
但是他们大部分拥有一个共同的本质:利用Windows操作系统高2GB内核共享空间进行数据传递的桥梁,所以他们都是内核对象!
所以他们大部分都要遵循:A创建对象-->A写入数据-->B打开A创建的对象-->B读入数据的规则*/

//下面着重通过一些代码Demo来加深下对进程间通信的理解


//命名管道

//进程A代码

#define READ_PIPE   L"\\\\.\\pipe\\ReadPipe"
#define WRITE_PIPE  L"\\\\.\\pipe\\WritePipe"      //   管道命名

typedef struct _USER_CONTEXT_ 
{
	HANDLE hPipe;
	HANDLE hEvent;
}USER_CONTEXT,*PUSER_CONTEXT;


USER_CONTEXT  Context[2] = {0};

HANDLE hThread[2] = {0};

BOOL  WritePipe();
BOOL  ReadPipe();

BOOL  bOk = FALSE;

DWORD WINAPI WritePipeThread(LPVOID LPParam);
DWORD WINAPI ReadPipeThread(LPVOID LPParam);
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	HANDLE hPipe = NULL;
	if (WritePipe()==FALSE)
	{
		return -1;
	}
	if (ReadPipe()==FALSE)
	{

		return -1;
	}

	int iIndex = 0;
	while (TRUE)
	{    
		if (bOk==TRUE)
		{
			SetEvent(Context[0].hEvent);
			SetEvent(Context[1].hEvent);

			Sleep(1);
		}

		iIndex = WaitForMultipleObjects(2,hThread,TRUE,5000);

		if (iIndex==WAIT_TIMEOUT)
		{
			continue;
		}

		else
		{
			break;
		}

	}

	int i = 0;
	for (i=0;i            
关注
打赏
1659628745
查看更多评论
0.0547s