> -- Илья Ермаков писал(а):
> используйте Services.Action
Как-то так:
## Код:
```
MODULE Pifagor;

   IMPORT L := StdLog, Services;
   
   TYPE
      Calculator = POINTER TO RECORD (Services.Action)
         index: LONGINT
      END;

   VAR
      calculator: Calculator;
      
   PROCEDURE (this: Calculator) Do;
      VAR i, j, k: LONGINT;
   BEGIN INC(this.index); i := this.index;
      FOR j := (i DIV 2) TO i DO
         FOR k := 1 TO j DO
            IF i*i = j*j + k*k THEN
               L.Int(i); L.String(","); L.Int(j); L.String(","); L.Int(k); L.Ln
            END
         END
      END;
      IF this.index < 15000 THEN
         Services.DoLater(this, Services.now)
      ELSE
         calculator := NIL;
         L.String("Готово!"); L.Ln
      END
   END Do;

   PROCEDURE Stop*;
   BEGIN
      IF calculator # NIL THEN
         Services.RemoveAction(calculator); calculator := NIL;
         L.String("Калькулятор остановлен"); L.Ln
      END
   END Stop; 

   PROCEDURE Start*;
   BEGIN Stop; NEW(calculator);
      Services.DoLater(calculator, Services.Ticks() + 3 * Services.resolution);
      L.String("Калькулятор заработает через три секунды..."); L.Ln
   END Start; 

END Pifagor.
```

Pifagor.Start - запустить фоновое вычисление,
Pifagor.Stop - остановить фоновое вычисление.