⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 port_sema.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 2 页
字号:
}intosip_sem_post (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  return semGive (sem->semId);}intosip_sem_wait (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  return semTake (sem->semId, WAIT_FOREVER);}intosip_sem_trywait (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  return semTake (sem->semId, NO_WAIT);}#endif#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(HAVE_PTHREAD_WIN32)#include <limits.h>#if (_WIN32_WINNT >= 0x0403) && !defined(_WIN32_WCE)struct osip_mutex *osip_mutex_init (){  osip_mutex_t *mut = (osip_mutex_t *) osip_malloc (sizeof (osip_mutex_t));  if (mut == NULL)    return NULL;  if (InitializeCriticalSectionAndSpinCount      (&mut->h, OSIP_CRITICALSECTION_SPIN) != 0)    return (struct osip_mutex *) (mut);  osip_free (mut);  return (NULL);}voidosip_mutex_destroy (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return;  DeleteCriticalSection (&mut->h);  osip_free (mut);}intosip_mutex_lock (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return OSIP_BADPARAMETER;  EnterCriticalSection (&mut->h);  return (0);}intosip_mutex_unlock (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return OSIP_BADPARAMETER;  LeaveCriticalSection (&mut->h);  return (0);}#elsestruct osip_mutex *osip_mutex_init (){  osip_mutex_t *mut = (osip_mutex_t *) osip_malloc (sizeof (osip_mutex_t));  if (mut == NULL)    return NULL;  if ((mut->h = CreateMutex (NULL, FALSE, NULL)) != NULL)    return (struct osip_mutex *) (mut);  osip_free (mut);  return (NULL);}voidosip_mutex_destroy (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return;  CloseHandle (mut->h);  osip_free (mut);}intosip_mutex_lock (struct osip_mutex *_mut){  DWORD err;  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return OSIP_BADPARAMETER;  if ((err = WaitForSingleObject (mut->h, INFINITE)) == WAIT_OBJECT_0)    return (0);  return (EBUSY);}intosip_mutex_unlock (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut == NULL)    return OSIP_BADPARAMETER;  ReleaseMutex (mut->h);  return (0);}#endifstruct osip_sem *osip_sem_init (unsigned int value){  osip_sem_t *sem = (osip_sem_t *) osip_malloc (sizeof (osip_sem_t));  if (sem == NULL)    return NULL;  if ((sem->h = CreateSemaphore (NULL, value, LONG_MAX, NULL)) != NULL)    return (struct osip_sem *) (sem);  osip_free (sem);  return (NULL);}intosip_sem_destroy (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_SUCCESS;  CloseHandle (sem->h);  osip_free (sem);  return (0);}intosip_sem_post (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  ReleaseSemaphore (sem->h, 1, NULL);  return (0);}intosip_sem_wait (struct osip_sem *_sem){  DWORD err;  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  if ((err = WaitForSingleObject (sem->h, INFINITE)) == WAIT_OBJECT_0)    return (0);  if (err == WAIT_TIMEOUT)    return (EBUSY);  return (EBUSY);}intosip_sem_trywait (struct osip_sem *_sem){  DWORD err;  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  if ((err = WaitForSingleObject (sem->h, 0)) == WAIT_OBJECT_0)    return (0);  return (EBUSY);}#endif#ifdef __PSOS__struct osip_mutex *osip_mutex_init (){  osip_mutex_t *mut = (osip_mutex_t *) osip_malloc (sizeof (osip_mutex_t));  if (sm_create ("mut", 1, 0, &mut->id) == 0)    return (struct osip_mutex *) (mut);  osip_free (mut);  return (NULL);}voidosip_mutex_destroy (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut)    {      sm_delete (mut->id);      osip_free (mut);    }}intosip_mutex_lock (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut)    {      if (sm_p (mut->id, SM_WAIT, 0) != 0)        return OSIP_UNDEFINED_ERROR;    }  return (0);}intosip_mutex_unlock (struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if (mut)    {      sm_v (mut->id);    }  return (0);}struct osip_sem *osip_sem_init (unsigned int value){  osip_sem_t *sem = (osip_sem_t *) osip_malloc (sizeof (osip_sem_t));  if (sm_create ("sem", value, 0, &sem->id) == 0)    return (struct osip_sem *) (sem);  osip_free (sem);  return (NULL);}intosip_sem_destroy (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_SUCCESS;  sm_delete (sem->id);  osip_free (sem);  return (0);}intosip_sem_post (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  return (sm_v (sem->id));}intosip_sem_wait (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  if (sm_p (sem->id, SM_WAIT, 0) != 0)    return (-1);  return (0);}intosip_sem_trywait (struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    return OSIP_BADPARAMETER;  if (sm_p (sem->id, SM_NOWAIT, 0) != 0)    return OSIP_UNDEFINED_ERROR;  return (0);}#endif#if defined(__rtems__)struct osip_mutex *osip_mutex_init(){  rtems_status_code status;  osip_mutex_t *mut = (osip_mutex_t *) osip_malloc(sizeof(osip_mutex_t));  status = rtems_semaphore_create( rtems_build_name( 's','i','p','M'),				   1, /* Count */				   RTEMS_SIMPLE_BINARY_SEMAPHORE ,				   0,				   &mut->id);  if ( status == RTEMS_SUCCESSFUL )    {      return (struct osip_mutex *) (mut);    }  osip_free(mut);  return (NULL);}void osip_mutex_destroy(struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if ( mut != NULL )    {      rtems_semaphore_delete(mut->id);      osip_free(mut);    }}int osip_mutex_lock(struct osip_mutex *_mut){  rtems_status_code status;  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if ( mut != NULL)    {      status = rtems_semaphore_obtain( mut->id,				       RTEMS_WAIT,				       RTEMS_NO_TIMEOUT);      if ( status != RTEMS_SUCCESSFUL )	{	  return OSIP_UNDEFINED_ERROR;	}    }  return OSIP_SUCCESS;}int osip_mutex_unlock(struct osip_mutex *_mut){  osip_mutex_t *mut = (osip_mutex_t *) _mut;  if ( mut != NULL )    {      (void) rtems_semaphore_release( mut->id);    }  return (0);}struct osip_sem *osip_sem_init(unsigned int value){  rtems_status_code status;  osip_sem_t *sem = (osip_sem_t *) osip_malloc (sizeof (osip_sem_t));  status = rtems_semaphore_create( rtems_build_name('s','i','p','S'),				   value,				   RTEMS_COUNTING_SEMAPHORE,				   0,				   &sem->id);  if ( status == RTEMS_SUCCESSFUL )    {      return (struct osip_sem *) (sem);    }  osip_free (sem);  return (NULL);}int osip_sem_destroy(struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    {      return OSIP_SUCCESS;    }  rtems_semaphore_delete(sem->id);  osip_free (sem);  return (0);}int osip_sem_post(struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    {      return OSIP_UNDEFINED_ERROR;    }  return rtems_semaphore_release( sem->id);}int osip_sem_wait(struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    {      return OSIP_BADPARAMETER;    }  if ( rtems_semaphore_obtain( sem->id, RTEMS_WAIT, RTEMS_NO_TIMEOUT) != RTEMS_SUCCESSFUL )    {      return OSIP_UNDEFINED_ERROR;    }  return (0);}int osip_sem_trywait(struct osip_sem *_sem){  osip_sem_t *sem = (osip_sem_t *) _sem;  if (sem == NULL)    {      return OSIP_BADPARAMETER;    }  if ( rtems_semaphore_obtain( sem->id,RTEMS_NO_WAIT, 0) != RTEMS_SUCCESSFUL)    {      return OSIP_UNDEFINED_ERROR;    }  return (0);}#endif #endif /* #ifdef OSIP_MT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -