delphi 使用管道进程间通讯  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 使用管道进程间通讯


发起进程:创建管道,发送数据,接受反馈数据

Const  
  PipeName = '\\.\pipe\Test';  
  PipeSize = 1000;  
  PipeTimeOut = 3000;  
  
procedure PipeServer();  
var  
  Se:TSecurityAttributes;  
  SPipeHandle:THandle;  
  Buffer:Pchar;  
  WriteBuffer:DWORD;  
begin  
  Se.nLength:=Sizeof(TSecurityAttributes);  
  Se.lpSecurityDescriptor:=nil;  
  Se.bInheritHandle:=True;  
  SPipeHandle:=CreateNamedPipe(PipeName,  
  PIPE_ACCESS_DUPLEX OR FILE_FLAG_WRITE_THROUGH,  
  PIPE_TYPE_BYTE   or   PIPE_WAIT,  
  1,PipeSize,PipeSize,PipeTimeOut,@Se);  
  Buffer:=AllocMem(1000);  
  if SPipeHandle<> 0 then  
    begin  
      while True do  
        begin  
          if ConnectNamedPipe(SPipeHandle,nil) then  
            begin  
               Buffer:=PChar(IntToStr(GetTickCount));  
               //写入数据  
               WriteFile(SPipeHandle,Buffer[0],Length(Buffer),WriteBuffer,nil);  
               Sleep(500);  
               //等待反馈数据  
               ReadFile(SPipeHandle,Buffer[0],PipeSize,WriteBuffer,nil);  
               DisConnectNamedPipe(SPipeHandle);  
            end;  
          Sleep(2000);  
        end;  
       CloseHandle(SPipeHandle);  
    end;  
  FreeMemory(Buffer);  
end;  

监听进程:接受数据,反馈数据

Const  
  PipeName = '\\.\pipe\Test';  
  PipeSize = 1000;  
  
procedure PipeClient();  
var    
  Buffer:Array [0..1000] of Char;    
  Requst:PChar;    
  ReadSize:DWORD;    
  hPipe:Thandle;  
begin    
 while True do     
  begin       
   if WaitNamedPipe(PipeName,NMPWAIT_WAIT_FOREVER) then       
     begin         
       hPipe:=CreateFile(PipeName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NiL,  
OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE or FILE_FLAG_WRITE_THROUGH, 0);   
       if hPipe <> INVALID_HANDLE_VALUE   then      
         begin         
           ReadSize:=0;        
           ReadFile(hPipe,Buffer[0],PipeSize,ReadSize,nil);      
           if ReadSize > 0 then       
            begin               
            //收到数据        
              Requst:= Pchar(Format('%s OK',[Buffer]));      
            //写入反馈             
              WriteFile(hPipe,Requst[0],Length(Requst),ReadSize,nil);      
            end;       
          CloseHandle(hPipe);      
         end;      
    end;   
  end;  
end;  


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.045280933380127 seconds