2010-11-10 90 views
0

我想知道如何在通過網絡再次發送之前向某些收到的原始數據添加延遲(例如:200ms)。發送之前在原始數據中添加延遲?

在發送之前是否可以使用內存來存儲位(8000)。

+2

以及在我'睡覺'之前要走的英里:) – Chubsdad 2010-11-10 11:18:36

+0

你在哪個平臺上編程? Windows/Mac OSX/Linux? – Neopallium 2010-11-10 20:24:33

+0

@ Neopallium:It's Win .... MVSC++ – fsidiosidi 2010-11-11 08:38:47

回答

1

是的,但它超出了本網站的範圍,給你一個完整的實施。但是,這裏有一些提示

存儲內存是足夠基本的。要存儲8000位數據,你可以使用std :: bitset,或者你可以手動實現它,毫無疑問,每1000個字節的常規8位每字節系統。如果你需要通過網絡將它發送爲8000位,那麼後一種形式就是你要用的,但是你可以從std :: bitset中獲得原始數據,所以你仍然可以在內部使用這個類。

延遲只是一個編寫調度程序的問題,std :: priority_queue可以用來實現這一點。

+0

感謝您的回答, – fsidiosidi 2010-11-10 12:06:52

+0

因此,只需將數據推送到內存(例如,延遲10ms,速度爲32kbits/s的8000位)即可增加延遲。 。 – fsidiosidi 2010-11-10 12:08:21

+0

@ user502951:如果你的流是無限的並且是同步的,那麼這將工作。否則,什麼事件會觸發發送最後的8000位? – MSalters 2010-11-10 12:16:13

1

您不存儲或發送8000位引起延遲。在發送數據之前,使用usleep()/ nanosleep()函數將程序暫停200ms。可以使用Win32 Timer API SetTimer/KillTimer。將想要延遲的數據添加到隊列中,然後啓動計時器以延遲數據的毫秒數。當計時器關閉時,從隊列中移除數據併發送。

+0

我不想停止該程序...我希望他仍然從網絡接收......並將延遲添加到數據(實時),然後開始通過網絡再次發送數據... – fsidiosidi 2010-11-11 08:40:39

+0

我確實找到了解決方案...通過使用2個線程從網絡接收數據並將其推送到隊列,另一個從隊列中彈出數據並將其發送到網絡。並通過使第二次睡眠一段時間我可以延遲....但問題是,我已經收到速率(32 kbit/s)!=發送速率(1.5 Mbits/s) – fsidiosidi 2010-11-12 08:55:33

+0

您的發送速率不能大於您的接收速率,而不是除非您添加數據或解壓縮接收的數據。 – Neopallium 2010-12-02 10:07:15