> -- Илья Ермаков писал(а):
> Но я не спорю против того, что иметь возможность простого контроля таймаута может быть полезно.Однако в том же Active Oberon её нет, и что? Операционная система на нём написана целиком - и отлично работает.
Подтверждаю!
Там "ограниченность ожидания" просто явно вынесена в возможность зппуска таймера и описывания следующего условия ожидания:## Код:
```
...
timer.Start( ourWaitConstrTimeInMS );
AWAIT( myCondition OR timer.Expired );
IF timer.Expired
THEN
  Делаем что-то по тайм-ауту
ELSE
  timer.Stop();
  делаем что-то "штатное"
END
...
```

Или - ещё так делают: создают логическую переменную в объекте где нужно ожидание по таймауту. А таймеру передают ссылку на один из методов, где просто этой переменной устанавливается логическая истина ("было срабатывание")## Код:
```
...
timeExpired : BOOLEAN;
PROCEDURE SetTimeOut; BEGIN  timeExpired := TRUE;  END SetTimeOut;
...
timeExpired := FALSE;
timer.Start( SetTimeOut );
AWAIT( myCondition OR timeExpired );
IF timeExpired
THEN
  Делаем что-то по тайм-ауту
ELSE
  timer.Stop();
  делаем что-то "штатное"
END
...
```
Какие проблемы? Всё - "по Вирту" - все действия ( вся логика ) явно описаны и наблюдаемы