mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	- pthread barriers implementation. - clock time.h - libiconv link - Support for dylib loading - CMake project fixes QTEditor parent project file.
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * APPLE Compatibility
 | |
|  */
 | |
| 
 | |
| #ifdef __APPLE__
 | |
| 
 | |
| #include <pthread.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #include "apple_compat.h"
 | |
| 
 | |
| int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
 | |
| {
 | |
|     if(count == 0)
 | |
|     {
 | |
|         errno = EINVAL;
 | |
|         return -1;
 | |
|     }
 | |
|     if(pthread_mutex_init(&barrier->mutex, 0) < 0)
 | |
|     {
 | |
|         return -1;
 | |
|     }
 | |
|     if(pthread_cond_init(&barrier->cond, 0) < 0)
 | |
|     {
 | |
|         pthread_mutex_destroy(&barrier->mutex);
 | |
|         return -1;
 | |
|     }
 | |
|     barrier->tripCount = count;
 | |
|     barrier->count = 0;
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int pthread_barrier_destroy(pthread_barrier_t *barrier)
 | |
| {
 | |
|     pthread_cond_destroy(&barrier->cond);
 | |
|     pthread_mutex_destroy(&barrier->mutex);
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int pthread_barrier_wait(pthread_barrier_t *barrier)
 | |
| {
 | |
|     pthread_mutex_lock(&barrier->mutex);
 | |
|     ++(barrier->count);
 | |
|     if(barrier->count >= barrier->tripCount)
 | |
|     {
 | |
|         barrier->count = 0;
 | |
|         pthread_cond_broadcast(&barrier->cond);
 | |
|         pthread_mutex_unlock(&barrier->mutex);
 | |
|         return 1;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         pthread_cond_wait(&barrier->cond, &(barrier->mutex));
 | |
|         pthread_mutex_unlock(&barrier->mutex);
 | |
|         return 0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Missing POSIX RealTime/Monotonic Clock
 | |
|  */
 | |
| #include <mach/mach_time.h>
 | |
| 
 | |
| int clock_gettime(int clk_id, struct timespec *t) {
 | |
|     mach_timebase_info_data_t timebase;
 | |
|     mach_timebase_info(&timebase);
 | |
|     uint64_t time;
 | |
|     time = mach_absolute_time();
 | |
|     double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom);
 | |
|     double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9);
 | |
|     t->tv_sec = seconds;
 | |
|     t->tv_nsec = nseconds;
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| #endif // APPLE Compatibility
 |