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

Вниз

Задержка на CloseHandle при чтении файла на удаленном ПК   Найти похожие ветки 

 
balepa   (2010-06-11 13:14) [0]

Имеется ПО которое опрашивает приборы и "складывает" в файлы по "кругу". Формат такой: Первые два байта указатель на "последнюю" запись остальные (600 записей По одной записи на секунду, для графиков 10 мин.) время и данные, т.е. считываем первые два байта перемещаемся на нужную позицию и считываем текущие значения.
При каждой записи, т.е. 1 раз в секунду происходит открытие файла запись данных и закрытие. С этим проблем нет.

Вторая программа (на удаленном ПК) которая считывает данные и отображает их. Проблема в том что на CloseHandle бывают задержки до ~1 секунды. Программа написана на VB5 c использованием таймера, и эти задержки влияют на скорость реакции приложения и отображение полученных данных. Пока решил данную проблему так: При создании формы открываю файл и закрываю его по завершении работы приложения. А во время работы раз в секунду открываю с др. хэндлами считываю и закрываю, в данном случае закрытие происходит без задержек.
Пример кода в VB5:


Sub OprosSet10(NNN, Tip, Dn() As Integer, Dn00() As Integer, NoDn() As Byte, PadamM, NOV)        
Dim Z As Integer
On Error GoTo errorh

   Upper = UBound(Dn, 3)
   Lower = LBound(Dn, 3)
   Open FileO(NNN, PadamM, Tip) For Binary Access Read Shared As #1 "открытие на чтение с SHARE_READ or SHARE_WRITE
       Get #1, 1, Z
       Get #1, , KolOth
       zzk = NomerVod(NNN, PadamM, Tip)
       If zzk <> Z Then
           Seek #1, (2858 - 0 * 2200) * (zzk - 1) + 5
m:          zzk = zzk + 1
           If zzk > 600 Then
               zzk = 1
           End If
           Get #1, , min(NNN, zzk, PadamM, Tip)
           Get #1, , Dn00
           If zzk = 1 Then Seek #1, 5
           For j = Lower To Upper
               Dn(NNN, zzk, j, Tip) = Dn00(j) "DN(blok,Nzap,ustr,tip)
           Next j
           If NNN = 1 And PadamM = 0 Then
               Dn(NNN, zzk, PNP_GP(NNN, 1436), Tip) = Dn(NNN, zzk, PNP_GP(NNN, 1436), Tip) - 50
           End If
           NomerVod(NNN, PadamM, Tip) = zzk
"            If PadamM = 0 Then Call Vvod_&#208;&#192;(NNN, Tip)
           If zzk <> Z And Z <> 0 Then GoTo m
           NOV = 1
       Else
           NOV = 0
       End If
errorh:
   Close #1
End Sub


Думал может операторы open, close, get, неправильно работают под XP. Написал dll на дельфи для работы с файлами, та же история.


library pRmotFile;
uses
 SysUtils,
 Classes,Windows;
{$R *.res}
var
 Data: Pointer;
 function OpenFileRMOT(path: Pchar): Cardinal; stdcall;
 var
   hFile: Cardinal;
 begin
   hFile:= CreateFile(path,GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
   Result:= hFile;
 end;

 function ReadFileRMOT(hFile: Cardinal; AData: Pointer; size: Integer): Cardinal; stdcall;
 var
   nobr: Cardinal;
 begin
   data:= AllocMem(size);
   ReadFile(hFile,Data^,size,nobr,nil);
   Move(data^,AData^,size);
   Result:= nobr;
   FreeMem(data,size);
 end;

 function SetFilePointerRMOT(hFile: Cardinal; distance: Integer): Cardinal; stdcall;
 var
  err: cardinal;
 begin
   err:= SetFilePointer(hFile,distance,nil,FILE_BEGIN);
   Result:= Err;
 end;

 function CloseFileRMOT(hFile: Cardinal): Cardinal; stdcall;
 begin
   CloseHandle(hFile);
 end;
 exports OpenFileRMOT,ReadFileRMOT,SetFilePointerRMOT, CloseFileRMOT;
begin
end.


ПК который собирает: W2k3 (файл-сервер),Core2Duo, 2x512Mb (533 Mhz) RAM, RAID1 WD 320Gb, LAN 1GB
ПК который считывает: WinXP SP2 LAN 100Mb-1Gb

P.S.: На компьютерах с Win98 проблем нет, да и на некоторых с WinXP, т.е. задержек на закрытии нет. Я понимаю что лучше уйти от файлов, я сейчас над этим работаю (перевожу на сокеты), но приложение большое и это займет некоторое время. Если нужно приведу код записи в файлы.


 
RWolf ©   (2010-06-11 14:53) [1]


> Я понимаю что лучше уйти от файлов, я сейчас над этим работаю
> (перевожу на сокеты), но приложение большое и это займет
> некоторое время.

На Named Pipes проще перевести по идее — API тот же, что для файлов.


 
balepa   (2010-06-11 15:02) [2]


> RWolf ©   (11.06.10 14:53) [1]
>
>
> > Я понимаю что лучше уйти от файлов, я сейчас над этим
> работаю
> > (перевожу на сокеты), но приложение большое и это займет
> > некоторое время.
>
> На Named Pipes проще перевести по идее — API тот же, что
> для файлов.


Рассмотрим данный вариант. Спасибо.


 
balepa   (2010-06-14 06:49) [3]

Так все таки  кто-нибудь объяснит почему идет задержка на закрытии ?
Я, понимаю при записи в файл она может быть, но тут чтение.


 
Anatoly Podgoretsky ©   (2010-06-14 08:54) [4]

> balepa  (14.06.2010 06:49:03)  [3]

Тут не чтение, тут закрытие.


 
balepa   (2010-06-14 10:02) [5]


> Anatoly Podgoretsky ©   (14.06.10 08:54) [4]
>
> > balepa  (14.06.2010 06:49:03)  [3]
>
> Тут не чтение, тут закрытие.


Имелось ввиду закрытие после чтения.


 
Anatoly Podgoretsky ©   (2010-06-14 10:20) [6]

> balepa  (14.06.2010 10:02:05)  [5]

Не важно что имелось в виду, это совсем другой процесс. Обычно многие
антивирусы контролируют закрытие.


 
balepa   (2010-06-14 14:02) [7]


> Anatoly Podgoretsky ©   (14.06.10 10:20) [6]
>
> > balepa  (14.06.2010 10:02:05)  [5]
>
> Не важно что имелось в виду, это совсем другой процесс.
> Обычно многие
> антивирусы контролируют закрытие.


А это как объяснить ???

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



К тому же

> да и на некоторых с WinXP, т.е. задержек на закрытии нет.

а на всех ПК антивир один и тот же и настроен одинаково.



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

Форум: "Прочее";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
6-1225222273
SKIPtr
2008-10-28 22:31
2010.09.12
Изменения файла в интернете


2-1276220053
DROWSY
2010-06-11 05:34
2010.09.12
Вопрос о запросе..


2-1277100140
Mishenka
2010-06-21 10:02
2010.09.12
Откуда берутся надписи в стандартных компонентах?


2-1276357423
DROWSY
2010-06-12 19:43
2010.09.12
2 запроса в Firebird 1.5


6-1226147951
Рем
2008-11-08 15:39
2010.09.12
Шлюз (покси) для разных рабочих групп ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский