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

Вниз

Запись в textfile   Найти похожие ветки 

 
loword2   (2007-01-26 17:59) [0]

Ситуация такая: Я использую некоторый компонент для работы с http протоколом (ICS -- THttpCli), который используется в виде массива этих компонентов. (th: array of THttpCli;) А обработчик событий один на всё это.
Ну так вот, мне необходимо, что-бы после некоторого разбора полученных данных, записать некоторые из них в textfile. Я пытался по разному сделать это, но т.к. процесс доступа к файлу происходит сразу по нескольким элементам из массива... то...

Я пытался проделать это двумя способами:
procedure TForm1.MyHttpCliRequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word);
var
 f1: textfile;
begin
 (sender as THttpCli).SendStream.Free;
 (sender as THttpCli).SendStream := nil;
 if ErrCode <> 0 then begin
....

     assignfile(f1, savefile);
     {$i-}append(f1);{$i+}
     if IOResult <> 0  then rewrite(f1);
     writeln(f1, Format("%s;%s;", [....]));
     closefile(f1);
.....


procedure TForm1.MyHttpCliRequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word);
var
 f1: textfile;
begin
 (sender as THttpCli).SendStream.Free;
 (sender as THttpCli).SendStream := nil;
 if ErrCode <> 0 then begin
....

   ResCrit.Enter;
   try
     assignfile(f1, savefile);
     try
       {$i-}append(f1);{$i+}
       if IOResult <> 0  then rewrite(f1);
       writeln(f1, Format("%s;%s;", [....]));
     finally
       closefile(f1);
     end;
   finally
     ResCrit.Leave;
   end;
.....


Но в любом случае, после некоторого времени стабильной работы, получаю I/O error. Что нужно сделать для корректной работы?


 
unknown ©   (2007-01-26 18:07) [1]


> Что нужно сделать для корректной работы?

Несколько нитей? Использовать TFileStream и критические секции.


 
loword2   (2007-01-26 18:11) [2]

Именно без нитей, ибо THttpCli, заточен работать спкойно и без использования Threads. Просто их массив. (компонентов)


 
Германн ©   (2007-01-26 18:14) [3]

Пусть с файлом работает кто-нибудь другой. А твои компоненты уже с ним.


 
loword2   (2007-01-26 18:25) [4]


> Пусть с файлом работает кто-нибудь другой. А твои компоненты
> уже с ним.

Ничего не понял, может можно чуть с примером?


 
Германн ©   (2007-01-26 18:30) [5]

Например.
В главной форме приложения:
procedure WMSaveLog(var Mes: TMessage); message WM_SaveLog;
В TForm1.MyHttpCliRequestDone:
 SendMessage(MainForm.Handle,WM_SaveLog,что-то,что-то);


 
loword2   (2007-01-26 19:48) [6]

Я сделал так:
MyHttpCliRequestDone:
   SendMessage(Handle, WM_SaveLog, 0, integer(Format("%s;%s;...", [....])));


А в обработчике WMSaveLog
writeln(f1, PChar(Mes.lParam));

Но проблема осталась, проходит некоторое количество времени, всё записывается нормально, а потом вдруг I/O error и после снова продолжается. Что такое?

При передачи через TMessage нужно ли использовать в обработчике CriticalSection?


 
Германн ©   (2007-01-27 00:21) [7]


> При передачи через TMessage нужно ли использовать в обработчике
> CriticalSection?
>

Не нужно. Но вот сейчас внимательно перечитал сабж и понял, что вообще собака порылась не тут.

> но т.к. процесс доступа к файлу происходит сразу по нескольким
> элементам из массива... то...
- Это чушь. Параллельная работа двух процедур типа твоей MyHttpCliRequestDone возможна только если они выполняются в разных потоках, но никак не в одном и том же.


 
Германн ©   (2007-01-27 01:46) [8]

Хотя тут моя компетенция недостаточна :(
Посмотрел бегло исходники ICS.
Этот самый THttpCli оказывается создаёт своё окно. А тогда возможны варианты, учитывая то, что код в сабже явно сформирован именно для выкладки на форум. С купюрами, а может и не только с ними :(



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

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

Наверх




Память: 0.49 MB
Время: 0.398 c
15-1169067840
Real
2007-01-18 00:04
2007.02.11
IE совсем что-то захирел...


15-1169382268
NikNet
2007-01-21 15:24
2007.02.11
Где скачать редактор для SQL (sybase) с наворотами...


2-1168556318
Wind
2007-01-12 01:58
2007.02.11
Создание *.xls отчета.


2-1169838260
Батя
2007-01-26 22:04
2007.02.11
Фон рабочего стола


15-1169322834
DMB1
2007-01-20 22:53
2007.02.11
Чат по протоколу TCP/IP клиент и сервер