哪有关于进程间管道通信的例程?

xinyu3310 2001-05-16 10:12:00
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyugood 2001-06-16
  • 打赏
  • 举报
回复
也可共享DLL,来实现信息交换
xinyu3310 2001-06-16
  • 打赏
  • 举报
回复
如何实现共享内存?
Jazzlover 2001-06-14
  • 打赏
  • 举报
回复
进程间可以通过共享对象。或者发送消息。
seedundersnow 2001-06-14
  • 打赏
  • 举报
回复
学习
vcbear 2001-06-14
  • 打赏
  • 举报
回复
这是一个命名管道的通信简单例程。很简单,就不加注释了。将就着看看吧。
注意:命名管道只能在win2000或NT里使用。

UINT ServerThread(LPVOID pParam)
{
OVERLAPPED OverLap;
char Buffer[1024]="";
DWORD dwBytesRead=0,dwBytesWrite = 0;
memset(&OverLap,0,sizeof(OVERLAPPED));
HANDLE hEvent = CreateEvent(NULL,false,true,"Event Name");
ResetEvent(hEvent);
OverLap.hEvent = hEvent;
HANDLE hPipe = (HANDLE )pParam;
::ConnectNamedPipe (hPipe,NULL);

ReadFile(hPipe,Buffer,sizeof(Buffer),&dwBytesRead,&OverLap);
WaitForSingleObject(OverLap.hEvent ,INFINITE);
//MessageBox(NULL,Buffer,"Get it From Client",MB_OK);
strcpy(Buffer,"This is From Server");
::WriteFile(hPipe,Buffer,sizeof(Buffer),&dwBytesWrite,NULL);
return 0;
}

UINT ClientThread(LPVOID pParam)
{

HANDLE hPipe = (HANDLE )pParam;

OVERLAPPED OverLap;
char Buffer[1024]="";
DWORD dwBytesRead=0,dwBytesWrite = 0;
memset(&OverLap,0,sizeof(OVERLAPPED));
HANDLE hEvent = CreateEvent(NULL,false,true,"Event");
OverLap.hEvent = hEvent;
strcpy(Buffer,"this is Client!");
::WriteFile(hPipe,Buffer,sizeof(Buffer),&dwBytesWrite,NULL);

Sleep(500);
memset(Buffer,0,sizeof(Buffer));
ResetEvent(hEvent);
ReadFile(hPipe,Buffer,sizeof(Buffer),&dwBytesRead,&OverLap);
WaitForSingleObject(OverLap.hEvent ,INFINITE);
MessageBox(NULL,Buffer,"Get it From Server",MB_OK);
PostQuitMessage(WM_QUIT);
ExitProcess(0);
return 0;
}

CString MachineName = "ServerMachine";
CString Name = "A_Name_Pipe";

void CTryNamePipeDlg::OnPipeStart()
{
// TODO: Add your control notification handler code here

CString PipeName =CString("\\\\.")+CString("\\pipe\\")+Name;
//::SetLastError (0);
HANDLE hServerPipe = ::CreateNamedPipe (PipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE,
PIPE_UNLIMITED_INSTANCES,
1024,
1024,
10*1000,
NULL);
if(hServerPipe == NULL||hServerPipe==INVALID_HANDLE_VALUE)
{
DWORD Err = GetLastError();
MessageBox("Open Server Fail");

return ;
}
CWinThread *pThread = ::AfxBeginThread (ServerThread,
(LPVOID)hServerPipe);

}

void CTryNamePipeDlg::OnPipeClient()
{
// TODO: Add your control notification handler code here
UpdateData(true);
MachineName = m_MachineName;
CString PipeName = CString("\\\\")+MachineName+CString("\\pipe\\")+Name;
if(!WaitNamedPipe (PipeName,1000))
{
DWORD Error = GetLastError();
MessageBox("WaitFail");

return;

}


HANDLE hNPipe = CreateFile(PipeName,
GENERIC_WRITE|GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hNPipe == NULL || hNPipe == INVALID_HANDLE_VALUE)
{
MessageBox("Create Error");
DWORD Err = GetLastError();
return ;
}

CWinThread *pThread = ::AfxBeginThread(ClientThread,
(LPVOID )hNPipe);
}
chxr 2001-06-14
  • 打赏
  • 举报
回复
那里有啊。。
111222 2001-05-30
  • 打赏
  • 举报
回复
我也想看这样的例子!

mhd(小马) :

msdn怎么走?
mhd 2001-05-16
  • 打赏
  • 举报
回复
万事请看msdn
xinyu3310 2001-05-16
  • 打赏
  • 举报
回复
请各位大虾指点

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧