C_RESULT vp_api_change_thread_prio_tab(thread_table_entry_t* tab, int32_t idx, int32_t priority) { if(idx < 0) return C_FAIL; if( tab[idx].handle != 0 ) { vp_os_thread_priority( tab[idx].handle, priority ); } return C_OK; }
void vp_os_thread_create(THREAD_ROUTINE f, THREAD_PARAMS parameters, THREAD_HANDLE *handle, ...) { int32_t priority; char* name; void* stack_base; unsigned int stack_size; va_list va; pthread_data_t* freeSlot = NULL; pthread_once(&once,&init_thread); vp_os_mutex_lock(&thread_mutex); freeSlot = findThread( NULL_THREAD_HANDLE ); while(freeSlot == NULL) { int old_size = threadTabSize; threadTabSize += 128; threadTab = ( pthread_data_t* )vp_os_realloc( threadTab, threadTabSize * sizeof( pthread_data_t ) ); vp_os_memset( threadTab + old_size, 0, threadTabSize * sizeof( pthread_data_t ) ); freeSlot = findThread( NULL_THREAD_HANDLE ); } vp_os_mutex_unlock(&thread_mutex); pthread_attr_init( &freeSlot->attr ); va_start(va, handle); priority = va_arg(va, int32_t); name = va_arg(va, char *); stack_base = va_arg(va, void *); stack_size = va_arg(va, unsigned int); /* thread = va_arg(va, cyg_thread *);*/ va_end(va); pthread_create( &freeSlot->handle, &freeSlot->attr, f, parameters); *handle = freeSlot->handle; vp_os_thread_priority(freeSlot->handle, priority); }