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
	
	 Yuval Dolev
						Yuval Dolev