mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-02 12:48:14 +00:00
Add thread.run* shorthand procedures; Thread.init_context use new Maybe concept
This commit is contained in:
+40
-2
@@ -1,6 +1,8 @@
|
||||
package thread
|
||||
|
||||
import "core:runtime"
|
||||
import "core:os"
|
||||
import "core:sync"
|
||||
|
||||
Thread_Proc :: #type proc(^Thread);
|
||||
|
||||
@@ -10,6 +12,42 @@ Thread :: struct {
|
||||
data: rawptr,
|
||||
user_index: int,
|
||||
|
||||
init_context: runtime.Context,
|
||||
use_init_context: bool,
|
||||
init_context: Maybe(runtime.Context),
|
||||
}
|
||||
|
||||
#assert(size_of(Thread{}.user_index) == size_of(uintptr));
|
||||
|
||||
|
||||
run :: proc(fn: proc(), init_context: Maybe(runtime.Context) = nil, priority := Thread_Priority.Normal) {
|
||||
thread_proc :: proc(t: ^Thread) {
|
||||
fn := cast(proc())t.data;
|
||||
fn();
|
||||
destroy(t);
|
||||
}
|
||||
t := create(thread_proc, priority);
|
||||
t.data = rawptr(fn);
|
||||
t.init_context = init_context;
|
||||
start(t);
|
||||
}
|
||||
|
||||
|
||||
run_with_data :: proc(fn: proc(data: rawptr), data: rawptr, init_context: Maybe(runtime.Context) = nil, priority := Thread_Priority.Normal) {
|
||||
thread_proc :: proc(t: ^Thread) {
|
||||
fn := cast(proc(rawptr))t.data;
|
||||
data := rawptr(uintptr(t.user_index));
|
||||
fn(data);
|
||||
destroy(t);
|
||||
}
|
||||
t := create(thread_proc, priority);
|
||||
t.data = rawptr(fn);
|
||||
t.user_index = int(uintptr(data));
|
||||
t.init_context = init_context;
|
||||
start(t);
|
||||
}
|
||||
|
||||
|
||||
run_with_thread_proc :: proc(fn: Thread_Proc, init_context: Maybe(runtime.Context) = nil, priority := Thread_Priority.Normal) {
|
||||
t := create(fn, priority);
|
||||
t.init_context = init_context;
|
||||
start(t);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user