1. 不同平臺下處理事件的API:
- Linux系統下,處理事件的API是epoll或者select;
- Windows系統下,處理事件的API是WSAEventSelect,完全端口;
- Mac系統下,kqueue
2. WebRTC下的事件處理類:
- NullSocketServer(處理無socket的事件)(工作線程)
- PhysicalSocketServer(處理有socket事件)(網絡線程)
事件如何協調線程工作:
信令線程—>觸發事件—>公共對象(NullSocketServer或PhysicalSocketServer)(喚醒睡眠線程)—>等待事件(睡眠狀態)—>工作線程/網絡線程
webrtc下事件的發生:
等待線程處理邏輯:
while(true)
{…Get(&msg, …); // 如果沒有時間,在Get()函數中睡眠等待事件…Dispatch(&msg);…
}
Get函數:
如果隊列不為空,則取出事件后調用Dispatch處理;如果隊列為空,則調用Wait等待事件發生
Wait函數: