eXosip入門(七):執行緒操作
阿新 • • 發佈:2019-02-18
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函式是整個協議棧的核心,對所有事務和事件的處理部分,都通過這個函式呼叫來執行。在多執行緒模式下,協議棧會開啟一個單獨的執行緒來呼叫該函式來處理事務。而在單執行緒模式下,則需要使用者自己呼叫。