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...