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

📄 port_thread.c

📁 libosip-0.9.7源码
💻 C
字号:
/*  The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)  Copyright (C) 2001,2002,2003  Aymeric MOIZARD jack@atosc.org    This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public  License as published by the Free Software Foundation; either  version 2.1 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  Lesser General Public License for more details.    You should have received a copy of the GNU Lesser General Public  License along with this library; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifdef OSIP_MT#include <stdio.h>#include <osip/port.h>#include <osip/thread.h>#if defined _WIN32_WCE#include <winbase.h>#define _beginthreadex	CreateThread#define	_endthreadex	ExitThread#elif defined WIN32#include <process.h>#endif/********************************//* Methods from port_thread.c   *//********************************//* launch a new thread.                               *//* INPUT :  int stacksize | size of the stack (for VxWorks only).*//* INPUT :  void *(*func)(void *) | .*//* INPUT :  void *arg | arg is the parameter for func.*//* OUTPUT:  pthread_t *thread | thread ID.   *//* returns SIP_NULL on error */#ifndef __VXWORKS_OS__#if defined(HAVE_PTHREAD) || defined(HAVE_PTH_PTHREAD_H)sthread_t *sthread_create (int stacksize, sthread_t * thread, void *(*func) (void *),		void *arg){  int i;  if (thread == NULL)    thread = (sthread_t *) smalloc (sizeof (sthread_t));  i = pthread_create (thread, NULL, func, (void *) arg);  /* HAVE TO DEAL WITH THE PTHREAD_CREATE_JOINABLE element */  if (i != 0)    {      OSIP_TRACE (osip_trace		  (__FILE__, __LINE__, OSIP_ERROR, NULL,		   "Error while creating a new thread\n"));      return NULL;    }  return thread;}intsthread_setpriority (sthread_t * thread, int priority){  return 0;}intsthread_join (sthread_t * thread){  if (thread == NULL)    return -1;  return pthread_join (*thread, NULL);}voidsthread_exit (){  pthread_exit (NULL);}#endif#endif#ifdef WIN32sthread_t * sthread_create (int stacksize, sthread_t * thread,			     void *(*func) (void *), void *arg){  if (thread == NULL)    thread = (sthread_t *) smalloc (sizeof (sthread_t));  thread->h = (HANDLE) _beginthreadex (NULL, /* default security attr */ 					 0, /* use default one */ 					 (void *) func, arg, 0,					 &(thread->id));  if (thread->h == 0)    {      return NULL;    }  return thread;}intsthread_join (sthread_t * thread){  int i;  if (thread == NULL)    return -1;  i = WaitForSingleObject (thread->h, INFINITE);  if (i == WAIT_OBJECT_0)    {      /* fprintf (stdout, "thread joined!\n"); */    }  else    {      /* fprintf (stdout, "ERROR!! thread joined ERROR!!\n"); */      return -1;    }  CloseHandle (thread->h);  return (0);}voidsthread_exit (){    /* ExitThread(0); */    _endthreadex (0);}intsthread_setpriority (sthread_t * thread, int priority){  return 0;}#endif#ifndef __VXWORKS_OS__#ifdef __PSOS__  sthread_t *sthread_create (int stacksize, sthread_t * thread,		void *(*func) (void *), void *arg){  if (thread == NULL)    thread = (sthread_t *) smalloc (sizeof (sthread_t));  if (t_create ("sip", 150, stacksize, 0, 0, &thread->tid) != 0)    {      sfree (thread);      return (NULL);    }  if (t_start (thread->tid, T_PREEMPT | T_ISR, func, 0) != 0)    {      sfree (thread);      return (NULL);    }  return thread;}intsthread_setpriority (sthread_t * thread, int priority){  unsigned long oldprio;  if (thread == NULL)    return -1;  t_setpri (thread->tid, priority, &oldprio);  return 0;}intsthread_join (sthread_t * thread){  if (thread == NULL)    return -1;  t_delete (thread->tid);  return (0);}voidsthread_exit (){  t_delete (0);}#endif#endif#ifdef __VXWORKS_OS__sthread_t *sthread_create (int stacksize, sthread_t * thread, void *(*func) (void *),		void *arg){  if (thread == NULL)    thread = (sthread_t *) smalloc (sizeof (sthread_t));  thread->id =    taskSpawn (NULL, 5, 0, stacksize, (FUNCPTR) func, (int) arg, 0, 0, 0, 0,	       0, 0, 0, 0, 0);  if (thread->id < 0)    sfree (thread);  return thread;}intsthread_setpriority (sthread_t * thread, int priority){  if (thread == NULL)    return -1;  taskPrioritySet (thread->id, 1);  return 0;}intsthread_join (sthread_t * thread){  if (thread == NULL)    return -1;  return taskDelete (thread->id);}voidsthread_exit (){  /*?? */}#endif#endif

⌨️ 快捷键说明

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