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函数是整个协议栈的核心,对所有事务和事件的处理部分,都通过这个函数调用来执行。在多线程模式下,协议栈会开启一个单独的线程来调用该函数来处理事务。而在单线程模式下,则需要用户自己调用。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值