1. 程式人生 > >eXosip入門(七):執行緒操作

eXosip入門(七):執行緒操作

       osip2/eXosip2支援執行緒安全,既可以用於多執行緒的程式設計模式,也可以用於單執行緒的程式設計模式。osip2/eXosip2預設是使用多執行緒模式,也就是預設使能OSIP_MT巨集。
       當使用多執行緒模式時,使用者需要編寫執行緒處理函式,並在協議棧初始化成功後啟動處理執行緒,示例程式碼如下:

UINT sipEventThread(void *pParams)
{
  eXosip_event_t *je;

  for (;;)
  {
      je = eXosip_event_wait (0, 50);
      eXosip_lock();
      eXosip_automatic_action ();
      eXosip_unlock();

      if (je == NULL)
        continue;

      switch (event->type)
     {
          case EXOSIP_REGISTRATION_NEW:
            break;

          case EXOSIP_REGISTRATION_SUCCESS: 
            break;

          case EXOSIP_REGISTRATION_FAILURE:
            break;

          case EXOSIP_REGISTRATION_TERMINATED:
            break;
          
          ……

          default:
            break;

      }

      eXosip_event_free(je);
  }
}

        對於單執行緒操作,並不是簡單的禁能OSIP_MT巨集即可,還需要增加一些額外的程式碼,示例程式碼如下:

 for (;;)
 {
      eXosip_event_t *event;

      if (!(event = eXosip_event_wait (0, 1)))
      {
#ifndef OSIP_MT
	  eXosip_execute();
	  eXosip_automatic_action ();
#endif
          osip_usleep (10000);
          continue;
      }

#ifndef OSIP_MT
      eXosip_execute();
#endif

      eXosip_automatic_action ();

      switch (event->type)
     {
          case EXOSIP_REGISTRATION_NEW:
            break;

          case EXOSIP_REGISTRATION_SUCCESS: 
            break;

          case EXOSIP_REGISTRATION_FAILURE:
            break;

          case EXOSIP_REGISTRATION_TERMINATED:
            break;
         
          ……

          default:
            break;
      }

      eXosip_event_free (event);
 }

         eXosip_execute函式是整個協議棧的核心,對所有事務和事件的處理部分,都通過這個函式呼叫來執行。在多執行緒模式下,協議棧會開啟一個單獨的執行緒來呼叫該函式來處理事務。而在單執行緒模式下,則需要使用者自己呼叫。