TCPMP中的Splitter機制

2021-04-25 18:15:27 字數 1048 閱讀 9769

splitter

在tcpmp

中主要是通過

inputthread

執行緒和主線程中的

format_fillqueue()

函式實現的。

inputthread

執行緒中主要通過呼叫

format_readinput()

函式,將輸入流中的資料讀取到記憶體鍊錶中。

過程如下:

得到reader->inputbuffer,如為空,則呼叫format_bufferalloc()建立

呼叫reader->input->readblock()函式,從輸入流中讀取指定大小的資料到前述buffer中。

判斷buffer的length,如為0,則到輸入流末尾,返回指定狀態值。

否則,將當前reader->inputbuffer插入到 reader->bufferfirst鍊錶末尾。

format_fillqueue()

函式是對packet操作的,過程如下:

得到一塊空閒packet

呼叫demuxer的readpacket()函式,讀取一幀長度的資料到packet中。

在demuxer的readpacket()函式中,要讀取大段資料時,會呼叫reader_readasref()函式,從記憶體鍊錶reader->bufferfirst中讀取資料到packet中。

如果記憶體鍊錶中已讀取的輸入流資料大小不夠,則不等待inputthread

執行緒,直接呼叫format_readbuffer()函式,先從輸入流中讀取更多的資料到記憶體鍊錶reader->bufferfirst中。

主線程在呼叫format_fillqueue()

函式後,將有讀取資料的pakcet儲存在format_stream的format_packet* packetfirst鍊錶中,供後續使用。

資料結構關係是:

winform中splitter的用法

1.將winform分為三列 整個窗體分成可以自動調節的三列的做法 1 往窗體上丟兩個panel控制項 其中 panelleft 設定dock屬性為 left 並調節好其寬度 panelright 設定dock屬性為 right 並調節好其寬度 2 往窗體上丟乙個splitter控制項名為split...

Python中的descriptor中的一點疑問

在我的印象中,類中的函式是可以有兩種呼叫方式的,如下 class b def func self return 10 b b b.func b.func b 於是,在之前研究descriptor的時候,我就有了幾點困惑 我將 更換成了如下兩個版本 版本1 import time class lazy...

python中的dict Python中的dict

dict python內建了字典 dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵 值 key value 儲存,具有極快的查詢速度。d print dict get michael d michael add a element d adam 67 print d...