Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Потоки (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.025 c
1-1091180896
fylhtq
2004-07-30 13:48
2004.08.15
Проблема с кириллицей и буфером обмена


3-1090238932
ligor
2004-07-19 16:08
2004.08.15
Текущая дата в IB 6.5 диалект 1


1-1091429169
Eagle8
2004-08-02 10:46
2004.08.15
Хранение данных в ехе


1-1091029870
denissoft
2004-07-28 19:51
2004.08.15
сохранить/загрузить Компонент


14-1091033833
Art_Z
2004-07-28 20:57
2004.08.15
Хочу книгу по железу!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский