clock.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2017 The Abseil Authors.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. //
  15. // -----------------------------------------------------------------------------
  16. // File: clock.h
  17. // -----------------------------------------------------------------------------
  18. //
  19. // This header file contains utility functions for working with the system-wide
  20. // realtime clock. For descriptions of the main time abstractions used within
  21. // this header file, consult the time.h header file.
  22. #ifndef ABSL_TIME_CLOCK_H_
  23. #define ABSL_TIME_CLOCK_H_
  24. #include <cstdint>
  25. #include "absl/base/config.h"
  26. #include "absl/base/macros.h"
  27. #include "absl/time/time.h"
  28. namespace absl {
  29. ABSL_NAMESPACE_BEGIN
  30. // Now()
  31. //
  32. // Returns the current time, expressed as an `absl::Time` absolute time value.
  33. absl::Time Now();
  34. // GetCurrentTimeNanos()
  35. //
  36. // Returns the current time, expressed as a count of nanoseconds since the Unix
  37. // Epoch (https://en.wikipedia.org/wiki/Unix_time). Prefer `absl::Now()` instead
  38. // for all but the most performance-sensitive cases (i.e. when you are calling
  39. // this function hundreds of thousands of times per second).
  40. int64_t GetCurrentTimeNanos();
  41. // SleepFor()
  42. //
  43. // Sleeps for the specified duration, expressed as an `absl::Duration`.
  44. //
  45. // Notes:
  46. // * Signal interruptions will not reduce the sleep duration.
  47. // * Returns immediately when passed a nonpositive duration.
  48. void SleepFor(absl::Duration duration);
  49. ABSL_NAMESPACE_END
  50. } // namespace absl
  51. // -----------------------------------------------------------------------------
  52. // Implementation Details
  53. // -----------------------------------------------------------------------------
  54. // In some build configurations we pass --detect-odr-violations to the
  55. // gold linker. This causes it to flag weak symbol overrides as ODR
  56. // violations. Because ODR only applies to C++ and not C,
  57. // --detect-odr-violations ignores symbols not mangled with C++ names.
  58. // By changing our extension points to be extern "C", we dodge this
  59. // check.
  60. extern "C" {
  61. ABSL_DLL void ABSL_INTERNAL_C_SYMBOL(AbslInternalSleepFor)(
  62. absl::Duration duration);
  63. } // extern "C"
  64. inline void absl::SleepFor(absl::Duration duration) {
  65. ABSL_INTERNAL_C_SYMBOL(AbslInternalSleepFor)(duration);
  66. }
  67. #endif // ABSL_TIME_CLOCK_H_