前言
webrtc中為了保證線程安全,在線程中使用消息隊列機制處理消息
正文
舉一個創建PeerConnectionFactory時的例子為例;此處已經創建了PeerConnectionFactory對象 pc_factory,此時需要對其進行Initialize()操作,首先創建了一個方法調用器
該方法調用器經過初始化之后保存着,實例對象, 需要調用的成員函數指針,和返回值,是用來調用方法的; 注意這個實現的虛函數OnMessage(),線程是通過該接口處理消息隊列中的消息
然后使用了方法調用器去調用Initialize去初始化pc_factory
Marshal是一個線程同步的方法調用函數,其通過當前對象初始化一個SynchronousMethodCall對象,然后調用其Invoke
該invoke()會判斷當前線程是否為目標線程,如果是就直接調用OnMessage()直接處理,;
否則會將調用,通過消息的方式發送給目標線程的消息隊列中
在線程檢查自己的消息隊列進行Dispatch()的時候,其會調用實現的虛函數OnMesaage()去處理該消息
執行該message的時候使用的是方法調用器的一個返回值去進行回調的,方法調用完成,r就有了實際的返回值,然后返回