|
BDE 4.14.0 Production release
|
#include <bslmt_turnstile.h>
Public Member Functions | |
| Turnstile (double rate, const bsls::TimeInterval &startTime=bsls::TimeInterval(0), const bsls::TimeInterval &minTimeToCallSleep=bsls::TimeInterval(1e-4)) | |
| ~Turnstile ()=default | |
| Destroy this object. | |
| void | reset (double rate, const bsls::TimeInterval &startTime=bsls::TimeInterval(0), const bsls::TimeInterval &minTimeToCallSleep=bsls::TimeInterval(1e-4)) |
| bsls::Types::Int64 | waitTurn (bool sleep=true) |
| bsls::Types::Int64 | lagTime () const |
This class provides a mechanism to meter time. Using either the constructor or the reset method, the client specifies rate, indicating the number of events per second that the turnstile will allow. The client then calls waitTurn, which will either sleep until the next event is to occur, or return immediately if waitTurn was called after the next event is due. If waitTurn is not called until after the next event is due, the turnstile is said to be lagging behind, and calls to waitTurn will not sleep until the events have caught up with the schedule. Note that calling waitTurn a single time does not bring a turnstile back on schedule. For example, if a turnstile's configured frequency is one event per second, and the client is 10 seconds behind schedule, if waitTurn were subsequently called once per second, the turnstile will remain at 10 seconds behind schedule. The amount by which events are lagging behind the schedule can be determined via the lagTime method, which returns the positive number of microseconds by which the turnstile is lagging, or 0 if the turnstile is not behind schedule.
See bslmt_turnstile
|
explicit |
Create a turnstile object that admits clients at the specified rate, expressed as the number of turns per second. Optionally specify the (relative) startTime of the first turn. If startTime is not specified, the first turn may be taken immediately. Optionally specify minTimeToCallSleep, the shortest period of time in seconds that the waitTurn function will go to sleep. The behavior is undefined unless 0 < rate.
|
default |
| bsls::Types::Int64 bslmt::Turnstile::lagTime | ( | ) | const |
Return the positive number of microseconds difference between the the current time and the next turn, indicating that the turnstile is lagging behind the configured rate. Otherwise, return 0.
| void bslmt::Turnstile::reset | ( | double | rate, |
| const bsls::TimeInterval & | startTime = bsls::TimeInterval(0), |
||
| const bsls::TimeInterval & | minTimeToCallSleep = bsls::TimeInterval(1e-4) |
||
| ) |
Reset the rate of this turnstile to the specified rate, expressed as the number of turns per second. Optionally specify the (relative) startTime of the first turn. If startTime is not specified, the first turn may be taken immediately. Optionally specify minTimeToCallSleep, the shortest period of time in seconds that the waitTurn function will go to sleep. The behavior is undefined unless 0 < rate. Note that threads blocked on waitTurn are not interrupted.
| bsls::Types::Int64 bslmt::Turnstile::waitTurn | ( | bool | sleep = true | ) |
Sleep until the next turn may be taken or return immediately if the optionally specified sleep is false, this turnstile is lagging behind schedule, or if the calculated sleep duration is less than minTimeToCallSleep. Return the non-negative number of microseconds spent waiting, or if sleep is false, the number of microseconds the function would have had to wait.