diff --git a/Kernel/include_std/chrono b/Kernel/include_std/chrono index 48d6ab0b..05cc14dd 100644 --- a/Kernel/include_std/chrono +++ b/Kernel/include_std/chrono @@ -36,14 +36,15 @@ namespace std duration(const duration &) = default; template - constexpr explicit duration(const Rep2 &r); + constexpr explicit duration(const Rep2 &r) { rep_ = r; } template constexpr duration(const duration &d); duration &operator=(const duration &other) = default; - constexpr Rep count() const; + constexpr Rep count() const { return rep_; } + static constexpr duration zero() noexcept; static constexpr duration min() noexcept; static constexpr duration max() noexcept; @@ -115,5 +116,11 @@ namespace std using weeks = std::chrono::duration>; using months = std::chrono::duration>; using years = std::chrono::duration>; + + template + constexpr ToDuration duration_cast(const std::chrono::duration &d) + { + return ToDuration(d.count()); + } } } diff --git a/Kernel/include_std/thread b/Kernel/include_std/thread index c10cfec4..51085018 100644 --- a/Kernel/include_std/thread +++ b/Kernel/include_std/thread @@ -21,6 +21,7 @@ #include #include #include +#include extern Tasking::Task *TaskManager; @@ -32,6 +33,8 @@ namespace std Tasking::TCB *Task = nullptr; public: + using id = Tasking::TCB *; + thread() = default; thread(const thread &) = delete; thread(thread &&) = delete; @@ -78,4 +81,20 @@ namespace std return Task; } }; + + namespace this_thread + { + thread::id get_id() noexcept; + + void yield() noexcept; + + template + void sleep_until(const chrono::time_point &abs_time); + + template + void sleep_for(const chrono::duration &rel_time) + { + TaskManager->Sleep(chrono::duration_cast(rel_time).count()); + } + } }