Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Задержка выполнения программы


Записюн ©   (2010-03-02 16:39:00) 

Столкнулся с проблемой. При сохранении в типизированный файл большого объема инфы одной записью (Запись получается большая, но в файле она одна) возникают ошибки на методе CloseFile. Если зацементировать строку с закрытием файла то все номрально и без ошибок. При этом если после этого просто нажать на кнопку с вызовом этого метода то все тож проходит без ошибок. Предполагаю, что процедура Write "записывает слишком долго" и при выходе из нее запись еще не завершена. Такое возможно? И в связи с этим вопрос... как проверить не занят ли в настоящее время файл и могу ли я его закрыть.


Записюн   (2010-03-03 12:25:00) [1]

Программа учебная. Потоки исключаются


Записюн   (2010-03-03 12:24:00) [2]

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


> Сергей М. ©   (03.03.10 11:32) [7]
> Конечно накосячил)OResult returns the result of the last
> Delphi I/O routine when I/O-checking is off (that is, when
> using the {$I-}  compiler option)


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

А ошибка которую я искал оказалась тривиальной. Я закрываю не тот файл)))


Сергей М.   (2010-03-03 12:13:00) [3]

Да и к чему этот геморрой с AssignFile и иже с ней ?


with TFileStream.Create('myfile', fmOpenRead) do
try
 ReadBuffer(WayPN, SizeOf(WayPN));
finally
 Free;
end;


Записюн   (2010-03-03 12:10:00) [4]

Блин. Все. Вопрос снят. Сам косяк. Прошу прощения


Сергей М.   (2010-03-03 12:07:00) [5]

Чего "все верно"-то ?

Для того чтобы IOResult возвращала актуальный результат, опция $I должна быть выключена!

А у тебя она, наоборот, включена)
Вот IOResult тебе хрень и возвращает. А ты эту хрень пытаешься трактовать как актуальный результат непонятно какой операции)


Записюн   (2010-03-03 12:03:00) [6]

Ну...все верно. Компилятор в общем и целом хранит в регистре ioresult сотсояние ошибок ввода вывода. Где косяк? Или я опять что-то непонимаю


Сергей М.   (2010-03-03 11:32:00) [7]

Конечно накосячил)

OResult returns the result of the last Delphi I/O routine when I/O-checking is off (that is, when using the {$I-}  compiler option)


Записюн   (2010-03-03 11:23:00) [8]

const
 MaxPN=100;

type
TWayPN=array[1..MaxPN,1..MaxPN]of integer;

var
 FWayPN        :file of TWayPN;

...

{$I-}
 AssignFile(FWayPN,PathProgramm+PathDictionary+PathCurDistr+PathWayPN);
 Reset(FWayPN);
 Read(FWayPN,WayPN);
 //вставить задержку по времени

//  closeFile(FPN);
{$I+}
 if IOResult<>0
 then
 begin
   ClearWayPN;
   AssignFile(FWayPN,PathProgramm+PathDictionary+PathCurDistr+PathWayPN);
   Rewrite(FWayPN);
   Write(FWayPN,WayPN);
//   closeFile(FPN);
 end;

так вот всегда эта процедура проходит по ветви с ошибкой. Когда регистр IOresult не равен 0. Может дейсчвительно я где-то накосячил?


Игорь Шевченко   (2010-03-02 23:15:00) [9]


> Предполагаю, что процедура Write "записывает слишком долго"
> и при выходе из нее запись еще не завершена


предположение неверное


Сергей М.   (2010-03-02 19:51:00) [10]


> в типизированный файл


Судя по всуе упомянутой "типизации" налицо глюкокод


Вася   (2010-03-02 19:30:00) [11]


> Предполагаю, что процедура Write "записывает слишком долго"
> и при выходе из нее запись еще не завершена. Такое возможно?
>


нет, вызов синхронный. ТО есть управление будет получено обратно уже после завершения операции (успешного или неуспешного)


Плохиш   (2010-03-02 18:44:00) [12]


> Записюн   (02.03.10 16:39)  

В вашем глюкокоде ошибка.


Sairex   (2010-03-02 16:48:00) [13]

А через TFileStream не пробывал писать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо