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;  

相关阅读 >>

Delphi nativexml的中文支持

Delphi调用cmd并取得输出字符

Delphi getprocessidentity 获取当前登录状态的管理员

Delphi滚动标题栏文字

Delphi 之 编辑框控件(tedit)

Delphi date 返回当前的日期

Delphi format中的换行符号是什么

Delphi strtofloat 将“字符型”转换成“浮点型”

Delphi 检测文件数字签名

Delphi xe5中移动平台的字符串要注意的事项

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...