GRPC C++  1.53.0
alarm.h
Go to the documentation of this file.
1 //
2 //
3 // Copyright 2015 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
21 #ifndef GRPCPP_ALARM_H
22 #define GRPCPP_ALARM_H
23 
24 #include <functional>
25 
26 #include <grpc/grpc.h>
30 #include <grpcpp/support/time.h>
31 
32 namespace grpc {
33 
35  public:
37  Alarm();
38 
40  ~Alarm() override;
41 
49  template <typename T>
50  Alarm(grpc::CompletionQueue* cq, const T& deadline, void* tag) : Alarm() {
51  SetInternal(cq, grpc::TimePoint<T>(deadline).raw_time(), tag);
52  }
53 
58  //
59  // USAGE NOTE: This is frequently used to inject arbitrary tags into \a cq by
60  // setting an immediate deadline. Such usage allows synchronizing an external
61  // event with an application's \a grpc::CompletionQueue::Next loop.
62  template <typename T>
63  void Set(grpc::CompletionQueue* cq, const T& deadline, void* tag) {
64  SetInternal(cq, grpc::TimePoint<T>(deadline).raw_time(), tag);
65  }
66 
68  Alarm(const Alarm&) = delete;
69  Alarm& operator=(const Alarm&) = delete;
70 
72  Alarm(Alarm&& rhs) noexcept : alarm_(rhs.alarm_) { rhs.alarm_ = nullptr; }
73  Alarm& operator=(Alarm&& rhs) noexcept {
74  alarm_ = rhs.alarm_;
75  rhs.alarm_ = nullptr;
76  return *this;
77  }
78 
81  void Cancel();
82 
86  template <typename T>
87  void Set(const T& deadline, std::function<void(bool)> f) {
88  SetInternal(grpc::TimePoint<T>(deadline).raw_time(), std::move(f));
89  }
90 
91  private:
92  void SetInternal(grpc::CompletionQueue* cq, gpr_timespec deadline, void* tag);
93  void SetInternal(gpr_timespec deadline, std::function<void(bool)> f);
94 
96 };
97 
98 } // namespace grpc
99 
100 #endif // GRPCPP_ALARM_H
time.h
grpc::Alarm::operator=
Alarm & operator=(const Alarm &)=delete
grpc
An Alarm posts the user-provided tag to its associated completion queue or invokes the user-provided ...
Definition: alarm.h:32
completion_queue_tag.h
grpc::Alarm::Alarm
Alarm(Alarm &&rhs) noexcept
Alarms are movable.
Definition: alarm.h:72
grpc::Alarm::operator=
Alarm & operator=(Alarm &&rhs) noexcept
Definition: alarm.h:73
grpc::Alarm::Cancel
void Cancel()
Cancel a completion queue alarm.
completion_queue.h
grpc.h
grpc::Alarm::Set
void Set(grpc::CompletionQueue *cq, const T &deadline, void *tag)
Trigger an alarm instance on completion queue cq at the specified time.
Definition: alarm.h:63
grpc::Alarm::Alarm
Alarm(grpc::CompletionQueue *cq, const T &deadline, void *tag)
DEPRECATED: Create and set a completion queue alarm instance associated to cq.
Definition: alarm.h:50
grpc::internal::GrpcLibrary
Classes that require gRPC to be initialized should inherit from this class.
Definition: grpc_library.h:32
grpc::Alarm::Alarm
Alarm()
Create an unset completion queue alarm.
grpc::Alarm
Definition: alarm.h:34
grpc::internal::CompletionQueueTag
An interface allowing implementors to process and filter event tags.
Definition: completion_queue_tag.h:26
grpc::Alarm::~Alarm
~Alarm() override
Destroy the given completion queue alarm, cancelling it in the process.
grpc_library.h
grpc::CompletionQueue
A thin wrapper around grpc_completion_queue (see src/core/lib/surface/completion_queue....
Definition: completion_queue.h:103
gpr_timespec
Analogous to struct timespec.
Definition: time.h:48
grpc::Alarm::Set
void Set(const T &deadline, std::function< void(bool)> f)
Set an alarm to invoke callback f.
Definition: alarm.h:87
grpc::TimePoint
If you are trying to use CompletionQueue::AsyncNext with a time class that isn't either gpr_timespec ...
Definition: time.h:40