Files
clice/include/Async/Sleep.h
2025-02-13 23:20:03 +08:00

38 lines
745 B
C++

#pragma once
#include <chrono>
#include "Awaiter.h"
namespace clice::async {
namespace awaiter {
struct sleep : uv<sleep, uv_timer_t, void> {
std::chrono::milliseconds duration;
int start(auto callback) {
int err = uv_timer_init(async::loop, &request);
if(err < 0) {
return err;
}
return uv_timer_start(&request, callback, duration.count(), 0);
}
void cleanup() {
error = uv_timer_stop(&request);
}
};
} // namespace awaiter
inline auto sleep(std::chrono::milliseconds duration) {
return awaiter::sleep{{}, duration};
}
inline auto sleep(std::size_t milliseconds) {
return sleep(std::chrono::milliseconds(milliseconds));
}
}; // namespace clice::async