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

📄 port_thread.c

📁 嵌入式产品中的osip的源代码.
💻 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 <osip2/internal.h>#include <osip2/osip_mt.h>#if defined _WIN32_WCE#include <winbase.h>#define _beginthreadex	CreateThread#define	_endthreadex	ExitThread#elif defined WIN32#include <process.h>#endif/* stack size is only needed on VxWorks. */#ifndef __VXWORKS_OS__#if defined(HAVE_PTHREAD) || defined(HAVE_PTH_PTHREAD_H)struct osip_thread *osip_thread_create (int stacksize, void *(*func) (void *), void *arg){  int i;  osip_thread_t *thread =    (osip_thread_t *) osip_malloc (sizeof (osip_thread_t));  if (thread == NULL)    return NULL;  i = pthread_create (thread, NULL, func, (void *) arg);  if (i != 0)    {      OSIP_TRACE (osip_trace		  (__FILE__, __LINE__, OSIP_ERROR, NULL,		   "Error while creating a new thread\n"));      return NULL;    }  return (struct osip_thread *) thread;}intosip_thread_set_priority (struct osip_thread *thread, int priority){  return 0;}intosip_thread_join (struct osip_thread *_thread){  osip_thread_t *thread = (osip_thread_t *) _thread;  if (thread == NULL)    return -1;  return pthread_join (*thread, NULL);}voidosip_thread_exit (){  pthread_exit (NULL);}#endif#endif#ifdef WIN32struct osip_thread *osip_thread_create (int stacksize, void *(*func) (void *), void *arg){  osip_thread_t *thread =    (osip_thread_t *) osip_malloc (sizeof (osip_thread_t));  if (thread == NULL)    return NULL;  thread->h = (HANDLE) _beginthreadex (NULL,	/* default security attr */				       0,	/* use default one */				       (void *) func, arg, 0, &(thread->id));  if (thread->h == 0)    {      osip_free (thread);      return NULL;    }  return (struct osip_thread *) thread;}intosip_thread_join (struct osip_thread *_thread){  int i;  osip_thread_t *thread = (osip_thread_t *) _thread;  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);}voidosip_thread_exit (){  /* ExitThread(0); */  _endthreadex (0);}intosip_thread_set_priority (struct osip_thread *thread, int priority){  return 0;}#endif#ifndef __VXWORKS_OS__#ifdef __PSOS__struct osip_thread *osip_thread_create (int stacksize, void *(*func) (void *), void *arg){  osip_thread_t *thread =    (osip_thread_t *) osip_malloc (sizeof (osip_thread_t));  if (thread == NULL)    return (NULL);  if (t_create ("sip", 150, stacksize, 0, 0, &thread->tid) != 0)    {      osip_free (thread);      return (NULL);    }  if (t_start (thread->tid, T_PREEMPT | T_ISR, func, 0) != 0)    {      osip_free (thread);      return (NULL);    }  return (struct osip_thread *) thread;}intosip_thread_set_priority (struct osip_thread *_thread, int priority){  unsigned long oldprio;  osip_thread_t *thread = (osip_thread_t *) _thread;  if (thread == NULL)    return -1;  t_set_pri (thread->tid, priority, &oldprio);  return 0;}intosip_thread_join (struct osip_thread *_thread){  osip_thread_t *thread = (osip_thread_t *) _thread;  if (thread == NULL)    return -1;  t_delete (thread->tid);  return (0);}voidosip_thread_exit (){  t_delete (0);}#endif#endif#ifdef __VXWORKS_OS__struct osip_thread *osip_thread_create (int stacksize, void *(*func) (void *), void *arg){  osip_thread_t *thread =    (osip_thread_t *) osip_malloc (sizeof (osip_thread_t));  if (thread == NULL)    return NULL;  thread->id = taskSpawn (NULL, 5, 0, stacksize, (FUNCPTR) func, (int) arg,			  0, 0, 0, 0, 0, 0, 0, 0, 0);  if (thread->id < 0)    osip_free (thread);  return (struct osip_thread *) thread;}intosip_thread_set_priority (struct osip_thread *_thread, int priority){  osip_thread_t *thread = (osip_thread_t *) _thread;  if (thread == NULL)    return -1;  taskPrioritySet (thread->id, 1);  return 0;}intosip_thread_join (struct osip_thread *_thread){  osip_thread_t *thread = (osip_thread_t *) _thread;  if (thread == NULL)    return -1;  return taskDelete (thread->id);}voidosip_thread_exit (){  /*?? */}#endif#endif

⌨️ 快捷键说明

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