## Код:
```
MODULE PrivAction;

   IMPORT Services, Log;
   
   TYPE
      Action = POINTER TO RECORD(Services.Action)  (* определяем реализацию отложенного действия, см. документацию к модулю Services *)
         i: INTEGER; (* нужные для чего-то поля *)
         stop: BOOLEAN;
      END;
   
   VAR
      rec: RECORD
         a: Action; (* глобальный идентификатор, в принципе - необязательно хранить идентификатор, но имеет смысл, если данные для обработки будут поступать из-вне *)
      END;   
      
   PROCEDURE (a: Action) Do; (* эта процедура будет выполняться через обозначенный промежуток времени *)
   BEGIN
      Log.Int(a.i);
      INC(a.i);
      IF ~a.stop THEN Services.DoLater(a, Services.Ticks()+1000) END; (* если не stop, то назначаем ещё одно выполнение через секунду от текущего момента *)
   END Do;
   
   PROCEDURE Stop*;
   BEGIN
      IF rec.a#NIL THEN rec.a.stop:=TRUE END; (* останавливаем действие, метод 1 *)
   END Stop;
   
   PROCEDURE Cancel*;
   BEGIN
      IF rec.a#NIL THEN Services.RemoveAction(rec.a) END; (* останавливаем действие, метод 2, при этом отменяется назначенное выполнение *)
   END Cancel;
   
   PROCEDURE Start*;
   BEGIN
      NEW(rec.a); rec.a.i:=0; rec.a.stop:=FALSE; (* создаём новый экземпляр *)
      Services.DoLater(rec.a, Services.Ticks()+1000); (* назначаем выполнение через секунду от текущего момента времени *)
   END Start;

BEGIN

CLOSE
   Cancel; (* останавливаем при выгрузке модуля *)
END PrivAction.

(!)PrivAction.Start
```
