Botcraft 1.21.4
Loading...
Searching...
No Matches
SleepUtilities.cpp
Go to the documentation of this file.
3
4#include <thread>
5#include <stdexcept>
6
7#if _WIN32 && BETTER_SLEEP
8#include <Windows.h>
9#undef Yield // Because there is a Yield macro in Windows API somewhere :]
10#include <timeapi.h>
11#endif
12
13namespace Botcraft::Utilities
14{
15 void SleepUntil(const std::chrono::steady_clock::time_point& end)
16 {
17#if _WIN32 && BETTER_SLEEP
18 timeBeginPeriod(1);
19#endif
20
21 std::this_thread::sleep_until(end);
22
23#if _WIN32 && BETTER_SLEEP
24 timeEndPeriod(1);
25#endif
26 }
27
28 bool WaitForCondition(const std::function<bool()>& condition, const long long int timeout_ms, const long long int check_interval_ms)
29 {
30 std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
31 while (timeout_ms == 0 || std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start).count() < timeout_ms)
32 {
33 if (condition())
34 {
35 return true;
36 }
37 SleepFor(std::chrono::milliseconds(check_interval_ms));
38 }
39 return false;
40 }
41
42 bool YieldForCondition(const std::function<bool()>& condition, BehaviourClient& client, const long long int timeout_ms)
43 {
44 std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
45 while (timeout_ms == 0 || std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start).count() < timeout_ms)
46 {
47 if (condition())
48 {
49 return true;
50 }
51 client.Yield();
52 }
53 return false;
54 }
55}
A ManagersClient extended with a blackboard that can store any kind of data and a virtual Yield funct...
virtual void Yield()=0
bool YieldForCondition(const std::function< bool()> &condition, BehaviourClient &client, const long long int timeout_ms=0)
void SleepUntil(const std::chrono::steady_clock::time_point &end)
bool WaitForCondition(const std::function< bool()> &condition, const long long int timeout_ms=0, const long long int check_interval_ms=10)
void SleepFor(const std::chrono::duration< _Rep, _Period > &time)