From a493350eb5ab38ba8a6563f3eb4a090d257b0d3a Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Fri, 10 Sep 2010 01:21:29 -0700 Subject: Cleanup, refactoring, and some runtime tests. --- src/rt/sync/sync.cpp | 12 ++++++++++++ src/rt/sync/sync.h | 2 ++ src/rt/sync/timer.cpp | 5 +++++ src/rt/sync/timer.h | 1 + 4 files changed, 20 insertions(+) (limited to 'src/rt/sync') diff --git a/src/rt/sync/sync.cpp b/src/rt/sync/sync.cpp index c754392a..be874a11 100644 --- a/src/rt/sync/sync.cpp +++ b/src/rt/sync/sync.cpp @@ -11,6 +11,18 @@ void sync::yield() { #endif } +void sync::sleep(size_t timeout_in_ms) { +#ifdef __WIN32__ + Sleep(timeout_in_ms); +#else + usleep(timeout_in_ms * 1000); +#endif +} + +void sync::random_sleep(size_t max_timeout_in_ms) { + sleep(rand() % max_timeout_in_ms); +} + rust_thread::rust_thread() : _is_running(false), thread(0) { // Nop. } diff --git a/src/rt/sync/sync.h b/src/rt/sync/sync.h index 3829dafe..bd755e1f 100644 --- a/src/rt/sync/sync.h +++ b/src/rt/sync/sync.h @@ -4,6 +4,8 @@ class sync { public: static void yield(); + static void sleep(size_t timeout_in_ms); + static void random_sleep(size_t max_timeout_in_ms); template static bool compare_and_swap(T *address, T oldValue, T newValue) { diff --git a/src/rt/sync/timer.cpp b/src/rt/sync/timer.cpp index 0487b397..e6fe3688 100644 --- a/src/rt/sync/timer.cpp +++ b/src/rt/sync/timer.cpp @@ -25,6 +25,11 @@ timer::get_elapsed_time() { return get_time() - _start; } +double +timer::get_elapsed_time_in_ms() { + return (double) get_elapsed_time() / 1000.0; +} + int64_t timer::get_timeout() { return _timeout - get_elapsed_time(); diff --git a/src/rt/sync/timer.h b/src/rt/sync/timer.h index 509fd22c..aae098a1 100644 --- a/src/rt/sync/timer.h +++ b/src/rt/sync/timer.h @@ -17,6 +17,7 @@ public: timer(); void reset(uint64_t timeout); uint64_t get_elapsed_time(); + double get_elapsed_time_in_ms(); int64_t get_timeout(); bool has_timed_out(); virtual ~timer(); -- cgit v1.2.3