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;
}
示例#2
0
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);
}