Added simple (albeit in many cases suboptiomal) c_sleep() method for coroutines.
This commit is contained in:
parent
e586698fb6
commit
b10f250945
27
source/mijin/async/coroutine_sleep.hpp
Normal file
27
source/mijin/async/coroutine_sleep.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if !defined(MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED)
|
||||||
|
#define MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED 1
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
#include "./coroutine.hpp"
|
||||||
|
|
||||||
|
namespace mijin
|
||||||
|
{
|
||||||
|
template<typename Rep, typename Period>
|
||||||
|
Task<> c_sleep(std::chrono::duration<Rep, Period> duration)
|
||||||
|
{
|
||||||
|
auto now = std::chrono::high_resolution_clock::now();
|
||||||
|
const auto end = now + duration;
|
||||||
|
while (now < end)
|
||||||
|
{
|
||||||
|
co_await c_suspend();
|
||||||
|
now = std::chrono::high_resolution_clock::now();
|
||||||
|
}
|
||||||
|
co_return;
|
||||||
|
}
|
||||||
|
} // namespace mijin
|
||||||
|
|
||||||
|
#endif // !defined(MIJIN_ASYNC_COROUTINE_SLEEP_HPP_INCLUDED)
|
Loading…
x
Reference in New Issue
Block a user