ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ILIAS\HTTP\Duration\CallbackDuration Class Reference
+ Inheritance diagram for ILIAS\HTTP\Duration\CallbackDuration:
+ Collaboration diagram for ILIAS\HTTP\Duration\CallbackDuration:

Public Member Functions

 stretch (callable $callback)
 
- Public Member Functions inherited from ILIAS\HTTP\Duration\Duration
 __construct (protected int $duration_in_ms)
 
 withIncrement (IncrementStrategy $increment)
 
 increment ()
 
 withDuration (int $duration_in_ms)
 
 getDuration ()
 

Additional Inherited Members

- Protected Attributes inherited from ILIAS\HTTP\Duration\Duration
const S_TO_US = 1_000_000
 number used for converting seconds (s) into microseconds (us/µ) or vise-versa. More...
 
const MS_TO_US = 1_000
 number used for converting miliseconds (ms) into microseconds (us/µ) or vise-versa. More...
 
IncrementStrategy $increment = null
 

Detailed Description

Author
Thibeau Fuhrer thibe.nosp@m.au@s.nosp@m.r.sol.nosp@m.utio.nosp@m.ns

Definition at line 26 of file CallbackDuration.php.

Member Function Documentation

◆ stretch()

ILIAS\HTTP\Duration\CallbackDuration::stretch ( callable  $callback)
Returns
mixed|null

Definition at line 31 of file CallbackDuration.php.

32 {
33 $start_time = microtime(true);
34 $halted = true;
35
36 register_shutdown_function(static function () use (&$halted): void {
37 if ($halted) {
38 throw new \LogicException("Callback could not be stretched because it halted the programm.");
39 }
40 });
41
42 $return = $callback();
43 $halted = false;
44
45 $elapsed_time_in_us = ((microtime(true) - $start_time) * self::S_TO_US);
46 $duration_in_us = ($this->duration_in_ms * self::MS_TO_US);
47
48 if ($elapsed_time_in_us > $duration_in_us) {
49 throw new \RuntimeException("Execution of callback exceeded the given duration and could not be stretched.");
50 }
51
52 if ($elapsed_time_in_us < $duration_in_us) {
53 usleep((int) round($duration_in_us - $elapsed_time_in_us));
54 }
55
56 return $return;
57 }
const MS_TO_US
number used for converting miliseconds (ms) into microseconds (us/µ) or vise-versa.
Definition: Duration.php:36

References ILIAS\HTTP\Duration\Duration\MS_TO_US.


The documentation for this class was generated from the following file: