Code: |
procedure TPipeThread.Execute; var hPipe: THandle; //Указатель на наш канал bytesRead: DWORD; //Количество прочитанных байт begin try hPipe := CreateNamedPipe('\\.\PIPE\OurPipe', //Наше имя PIPE_ACCESS_INBOUND, // сервер может только читать канал PIPE_WAIT or // Синхронная работа PIPE_READMODE_MESSAGE or // метод чтения - пакеты PIPE_TYPE_MESSAGE, PIPE_UNLIMITED_INSTANCES, // Бесконечно много клиентов SizeOf(Tpipedata), //размер буфера чтения SizeOf(Tpipedata), // размер буфера записи 100, // Тайм-аут nil); // Артребуты безопасности. if hPipe = INVALID_HANDLE_VALUE then Exit; //Если не удалось создать канал, то выходим
while true do //Теперь читаем, пока не надоест! begin try ConnectNamedPipe(hPipe, nil); //Подключаемся к каналу, второй параметр //нужен только, если вместо PIPE_WAIT вы указали PIPE_NOWAIT
//Теперь читаем, параметры – указатель на канал, наш буфер, //кол-во прочитанных байт, и последнее опять таки только для PIPE_NOWAIT. if ReadFile(hPipe, PipeData, SizeOf(TpipeData), bytesRead, nil) then begin Synchronize(ShowData); //Синхронизируемся с главным потоком end; finally DisconnectNamedPipe(hPipe); //Закрываем канал, параметры – только указатель end; end; finally end; end; |
Ну вот, это большая часть нашего сервера. Функцию ShowData можно сделать такую:
Code: |
procedure TPipeThread.ShowData; begin Case PipeData.pEvent of 1:form1.Memo1.Lines.Add('======Событие 1======'); 2:form1.Memo1.Lines.Add('=========Событие 2=========='); end; form1.Memo1.Lines.Add('Программа '+PipeData.Clientname+' открыла канал'); form1.Memo1.Lines.Add(DateTostr(PipeData.Date)); form1.Memo1.Lines.Add(''); end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!