Это все потому, что так и не удосужились сделать нормальное описание библиотеки.
Только примеры, которые выглядят странно. Потому что не ясно, что делать в случае тех или иных ошибок.
Возвращаясь к вашему примеру.
1. Состояние 0 (открытие файла) долбит запрос, пока не получит желанный ASYNC_WORKING, больше ни на что не обращая внимания. И то, после получения желаемого ответа продолжает то же самое из состояния 1. С тем же успехом это можно делать и из состояния 1.
2. Теперь состояние 2 (запись в файл). (согласен, 2 и 3 отличаются)
Если при первом запросе на запись не получено ASYNC_WORKING, надо закрывать файл? Почему? Там может быть куча разных причин/ошибок. А может, лучше подождать?
Откуда мне знать? Описания нет.
Состояние 3 вызывает те же вопросы. Плюс к тому: если не записалась требуемамя длина, то закрыть файл? А что случилось, все равно? Может, кончилось место? Такой ошибки почему-то нет. А мне позарез надо данные сохранить!
3. Состояние 4 (закрытие файла).
Если с первого запроса не получено ASYNC_WORKING, то записать строку(???) (переход в состояние 3).
Вообще непонятно. Мне надо закрыть файл, данные кончились, что там еще записывать?Код:4: (*закрываем файл этап1*) res:=OwenFileCloseAsync(handle, ADR(result)); (*закрываем файл*) IF res=ASYNC_WORKING THEN (*если "работа",то переходим в состояние 5, либо в 3*) state:=5; ELSE state:=3; END_IF
А что произошло, когда при закрытии файла получено result <> 0?
Запрос на закрытие файла повторяется снова и снова. Состояния 4 и 5 делают либо одно и то же, либо переходят на вообще ненужные действия - записывать данные, которых нет.Код:5:(*закрываем файл этап2*) res:=OwenFileCloseAsync(handle, ADR(result)); IF res=ASYNC_DONE THEN (*если "завершено", то переход в состояние 0*) IF result=0 THEN state:=6; ELSE state:=4; END_IF ELSIF res<0 THEN state:=4; END_IF




Ответить с цитированием