
Сообщение от
Владимир Ситников
Тут более важен сам подход: пишем код в синхронном стиле, а оно само разворачивает в автомат.
вопрос кто это будет разворачивать, кому доверять, как КДС будет анализировать
Код:
ILE true DO
CASE state OF (* и этот case тоже создал компилятор *)
0:
res:=OwenFileOpenAsync(stFileName, stMode, returnvalue);
IF res = ASYNC_WORKING THEN
state := 0; (* CONTINUE -- значит новое состояние это "начало цикла" -- т.е. 0 *)
RETURN; (* !! вернуть управление *)
END_IF;
(* state=1 используется из одного места -- можно не создавать отдельную case ветку *)
IF res<>ASYNC_DONE THEN (* это ошмёток UNTIL res<>ASYNC_DONE *)
state := 0;
ELSE
state := 2;
END_IF;
2:
RETURN;
END_CASE;
кода еще не было когда я написал пост, "По-моему, я весьма подробно описал почему код не зависнет. Нет?" если ни WORKING ни DONE state становиться равной двум вероятность этого огромна, мне такая ПАУЗА не нужна, лучше по старинке, что то ручками написать