Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Потоки (Thread)   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2004-08-02 17:22) [40]

sdw_syscoder   (02.08.04 17:20) [39]
Говори спасибо, что не IPC или COM сервер


 
sdw_syscoder   (2004-08-02 17:24) [41]

Ладно, хватит пока демогогии. Уже по ходу пустой базар пошел. Надо начинать уму разуму набираться.

Всех благодарю за приятную беседу и прошу эту ветку взять на карандаш, я ещё не закончил.

К завтрому наверное выясню и разберусь, вот тогда и поговорим.


 
Erik1   (2004-08-03 10:31) [42]

Вобщем все просто:
if Not CreatePipe(hRead,hWrite,nil,MaxPipiSize) Then begin
   ShowMessage("Not create Pipe"); //создание pipe
Это чтение данных:
procedure TCommon.Receive(Sender: TObject; Count: Integer);
Var Buffer: Pointer;
 Bytes : Integer;
   ByteWrite: DWord;
begin
 if (PipeSize + Count) > MaxPipiSize then
 begin
   ExitProg(self);
   Exit;
 end;

 GetMem(Buffer, TComm(Sender).ReadBufSize);
 try
  Bytes := TComm(Sender).Read(Buffer^, Count);
   if Bytes = -1 then FShowStatus.NewEvent(stErrorCheck)
   else begin
    FSection.Enter;
     WriteFile(hWrite,Buffer^,Bytes,ByteWrite,nil);
     Inc(PipeSize, ByteWrite);
     FSection.Leave;
     FEvent.SetEvent;
     if Assigned(InfoControl) Then
       InfoControl.CommRecive(Buffer, Bytes);
   end;
   Application.ProcessMessages;
 finally
  FreeMem(Buffer);
 end;
end;
Это считывание из pipe:
procedure WriteBase.CustomRead(Size: Word);
begin
 FSection.Enter;
ReadFile(hRead,PChar(IntBufer)^,Size,LastLen,nil);
 Dec(PipeSize,LastLen);
 FSection.Leave;
Buffer := Buffer + Copy(IntBufer,1,LastLen);
End;

procedure WriteBase.PortionRead;
Var CurRead: Word;
begin
 CurRead := Alllen-Length(Buffer);
if (PipeSize < CurRead) And ((LastLen < Alllen) or (PipeSize=0)) then CloseFileSystem
 else CustomRead(CurRead);
End;
Разумеется считывание работает в Thread
procedure WriteBase.Execute;
Label Read, Back;
begin
if LastSize < 0 Then begin
   raise Exception.Create("Not correct stantion seting, thread trminate!");
  Exit;
 end;
Read:
 if Terminated Then begin
  SaveLast;
  Exit;
 end;
Back:
 if FEventData.WaitFor($FFFFFFFF) = wrTimeout then GoTo Back;
PortionRead;
 if Length(Buffer) < AllLen then Goto Read;

CheckString;
 if FlagErr Then Goto Read;

 ProgStatus := trWork;
 WriteDecodeString;
goto Read;
end;
Это вырезки из старого проекта.


 
sdw_syscoder   (2004-08-03 18:37) [43]

> Erik1   (03.08.04 10:31) [42]
> Вобщем все просто:


Просто - это когда разберёшся, а я пока c этим методом не знаком.

А что вы думаете по поводу следующей мысли >>>
Если сделать так: принимать данные таким же методом и писать их в чистом виде в файл, а затем в stream/thread потоке обрабатывать и через функцию LoadFromFile выводить в RichEdit.



Страницы: 1 2 вся ветка

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.037 c
14-1090946476
Art_Z
2004-07-27 20:41
2004.08.15
Я еду в Москву!!!!


3-1089839578
demonyator
2004-07-15 01:12
2004.08.15
Как сделать SQL запрос не чувствительным к регистру?


8-1085733655
ma5ter
2004-05-28 12:40
2004.08.15
Нужна идея а лучше ссылка где есть описание


14-1091179093
Vixen
2004-07-30 13:18
2004.08.15
Написать, а потом загнать ShareWare программу.


4-1088760245
Rain
2004-07-02 13:24
2004.08.15
Компонент для работы с модемом