Implemented all system thread handling functions.
parent
aff4a783e0
commit
cbdc6a14e0
|
@ -145,9 +145,22 @@ mac_to_plat_handle(Mac_Object *object){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function inline System_Thread
|
||||||
|
mac_to_system_thread(Mac_Object *object){
|
||||||
|
System_Thread result = *(System_Thread*)(&object);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
function inline Mac_Object*
|
function inline Mac_Object*
|
||||||
mac_to_object(Plat_Handle handle){
|
mac_to_object(Plat_Handle handle){
|
||||||
Mac_Object* result = *(Mac_Object**)(&handle);
|
Mac_Object *result = *(Mac_Object**)(&handle);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function inline Mac_Object*
|
||||||
|
mac_to_object(System_Thread thread){
|
||||||
|
Mac_Object *result = *(Mac_Object**)(&thread);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -383,7 +383,7 @@ system_wake_up_timer_create_sig(){
|
||||||
|
|
||||||
function
|
function
|
||||||
system_wake_up_timer_release_sig(){
|
system_wake_up_timer_release_sig(){
|
||||||
Mac_Object *object = (Mac_Object*)mac_to_object(handle);
|
Mac_Object *object = mac_to_object(handle);
|
||||||
if (object->kind == MacObjectKind_Timer){
|
if (object->kind == MacObjectKind_Timer){
|
||||||
if ((object->timer.timer != nil) && [object->timer.timer isValid]) {
|
if ((object->timer.timer != nil) && [object->timer.timer isValid]) {
|
||||||
[object->timer.timer invalidate];
|
[object->timer.timer invalidate];
|
||||||
|
@ -394,7 +394,7 @@ system_wake_up_timer_release_sig(){
|
||||||
|
|
||||||
function
|
function
|
||||||
system_wake_up_timer_set_sig(){
|
system_wake_up_timer_set_sig(){
|
||||||
Mac_Object *object = (Mac_Object*)mac_to_object(handle);
|
Mac_Object *object = mac_to_object(handle);
|
||||||
if (object->kind == MacObjectKind_Timer){
|
if (object->kind == MacObjectKind_Timer){
|
||||||
f64 time_seconds = ((f64)time_milliseconds / 1000.0);
|
f64 time_seconds = ((f64)time_milliseconds / 1000.0);
|
||||||
object->timer.timer = [NSTimer scheduledTimerWithTimeInterval:time_seconds
|
object->timer.timer = [NSTimer scheduledTimerWithTimeInterval:time_seconds
|
||||||
|
@ -476,44 +476,67 @@ system_get_screen_scale_factor_sig(){
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
function void*
|
||||||
|
mac_thread_wrapper(void *ptr){
|
||||||
|
Mac_Object *object = (Mac_Object*)ptr;
|
||||||
|
Thread_Function *proc = object->thread.proc;
|
||||||
|
void *object_ptr = object->thread.ptr;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&mac_vars.thread_launch_mutex);
|
||||||
|
{
|
||||||
|
mac_vars.waiting_for_launch = false;
|
||||||
|
pthread_cond_signal(&mac_vars.thread_launch_cv);
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&mac_vars.thread_launch_mutex);
|
||||||
|
|
||||||
|
proc(object_ptr);
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
function
|
function
|
||||||
system_thread_launch_sig(){
|
system_thread_launch_sig(){
|
||||||
System_Thread result = {};
|
Mac_Object *object = mac_alloc_object(MacObjectKind_Thread);
|
||||||
|
object->thread.proc = proc;
|
||||||
|
object->thread.ptr = ptr;
|
||||||
|
|
||||||
NotImplemented;
|
pthread_mutex_lock(&mac_vars.thread_launch_mutex);
|
||||||
|
{
|
||||||
|
mac_vars.waiting_for_launch = true;
|
||||||
|
pthread_create(&object->thread.thread, 0, mac_thread_wrapper, object);
|
||||||
|
|
||||||
|
while (mac_vars.waiting_for_launch){
|
||||||
|
pthread_cond_wait(&mac_vars.thread_launch_cv, &mac_vars.thread_launch_mutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&mac_vars.thread_launch_mutex);
|
||||||
|
|
||||||
|
System_Thread result = mac_to_system_thread(object);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function
|
function
|
||||||
system_thread_join_sig(){
|
system_thread_join_sig(){
|
||||||
NotImplemented;
|
Mac_Object *object = mac_to_object(thread);
|
||||||
|
if (object->kind == MacObjectKind_Thread){
|
||||||
|
pthread_join(object->thread.thread, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function
|
function
|
||||||
system_thread_free_sig(){
|
system_thread_free_sig(){
|
||||||
NotImplemented;
|
Mac_Object* object = mac_to_object(thread);
|
||||||
|
if (object->kind == MacObjectKind_Thread){
|
||||||
|
mac_free_object(object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function
|
function
|
||||||
system_thread_get_id_sig(){
|
system_thread_get_id_sig(){
|
||||||
i32 result = 0;
|
i32 result = (i32)pthread_getthreadid_np();
|
||||||
|
|
||||||
NotImplemented;
|
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function
|
|
||||||
system_acquire_global_frame_mutex_sig(){
|
|
||||||
NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
function
|
|
||||||
system_release_global_frame_mutex_sig(){
|
|
||||||
NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
function
|
function
|
||||||
system_mutex_make_sig(){
|
system_mutex_make_sig(){
|
||||||
System_Mutex result = {};
|
System_Mutex result = {};
|
||||||
|
@ -538,6 +561,16 @@ system_mutex_free_sig(){
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function
|
||||||
|
system_acquire_global_frame_mutex_sig(){
|
||||||
|
NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
function
|
||||||
|
system_release_global_frame_mutex_sig(){
|
||||||
|
NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
function
|
function
|
||||||
system_condition_variable_make_sig(){
|
system_condition_variable_make_sig(){
|
||||||
System_Condition_Variable result = {};
|
System_Condition_Variable result = {};
|
||||||
|
|
Loading…
Reference in New Issue