added os.sleep
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 18 Jan 2022 19:12:45 +0000 (13:12 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 18 Jan 2022 19:12:45 +0000 (13:12 -0600)
core/os/os.onyx
core/runtime/onyx_run.onyx
core/threads/thread.onyx
modules/onyx_runtime/onyx_runtime.c

index c5aacf79f8e9bc3bf903ed373ed2e4b2a01037d8..7c5d59a8e5f444cd5ff567f1ace927a6bf0067a8 100644 (file)
@@ -43,4 +43,8 @@ list_directory :: (path: str) -> Iterator(DirectoryEntry) {
 
 exit :: (exitcode: i32) {
     runtime.__exit(exitcode);
-}
\ No newline at end of file
+}
+
+#if #defined(runtime.__sleep) {
+    sleep :: runtime.__sleep
+}
index 13c3f429a88f85575d6359718ff98bfaaaca9615..6a1dcca1b844add75a5cef6bc6f55c364bcee162 100644 (file)
@@ -30,6 +30,8 @@ __read_from_input :: (buffer: [] u8) -> i32 {
     __args_sizes_get :: (argc: ^i32, arg_buf_size: ^i32) -> void ---
 
     __exit :: (status: i32) -> void ---
+
+    __sleep :: (milliseconds: i32) -> void ---
 }
 
 #export "_start" () {
index a2c6a267fa350352cb0eb281ced2a0c4f1c433c6..82f277a3ced94e75d727e3ad15636e90dfb9472e 100644 (file)
@@ -37,6 +37,9 @@ join :: (t: ^Thread) {
     while t.alive {
         #if runtime.Wait_Notify_Available {
             __atomic_wait(^t.id, t.id);
+        } else {
+            // To not completely kill the CPU.
+            runtime.__sleep(1);
         }
     }
 }
index 0ddc9934a6164cd95df1051fe7c75b0ae587d098..8ff8bc3de4cf90369181867d101a54b2a2f5974e 100644 (file)
@@ -780,6 +780,11 @@ ONYX_DEF(__exit, (WASM_I32), ()) {
     return NULL;
 }
 
+ONYX_DEF(__sleep, (WASM_I32), ()) {
+    usleep(params->data[0].of.i32 * 1000);
+    return NULL;
+}
+
 
 
 //
@@ -1006,6 +1011,7 @@ ONYX_LIBRARY {
     ONYX_FUNC(__args_sizes_get)
 
     ONYX_FUNC(__exit)
+    ONYX_FUNC(__sleep)
 
     ONYX_FUNC(__net_create_socket)
     ONYX_FUNC(__net_close_socket)