不要太相信別人的註釋

         前幾天接手了一個程序,需要在原來的基礎上添加新的功能,具體如下:現有三個線程通過UDP分別接收音頻流、音頻流和視頻流。需要在這個基礎上添加新的功能,即要這三個線程也能夠接收圖片,接收的圖片只能一個線程接收一張,不能由同一個線程接收。我認爲這個應該是沒什麼問題的,只要將音頻的緩衝區在接收圖片時加大就可以了,結果顯然跟我預期的不一樣。代碼改出來了,測試時發現只有接收視頻流的那個線程能夠收到數據,其他的兩個線程無論怎麼弄死活收不到數據,從數據抓包,到重新寫個3線程的程序來模擬接收都證明數據發送 端確實把數據發出來了,是我這邊程序的問題。三個線程的代碼都看了好多遍都沒看出什麼端倪,本以爲幾個小時可以解決的問題10天都過去了(由一個線程接收所有數據,十分鐘搞定,但是上面規定就是要一個線程收一張,是不是有點冥頑不靈?),一點進展都沒有。跟上面反映說讓我先看着,有時間幫我看看,我就等。今天早上來跟硬件的同事聊了點童年趣事就過來準備看代碼了,我也沒指望出現什麼奇蹟,就按照前面的思路再查一遍,我把兩個線程的內容貼到了notepad++裏面準備再對比一下他們的異同,在eclipse裏面複製代碼時不小心點到了對應的頭文件,如下圖所示:

,反正是做不出來了,就看看當消磨這段令人窒息的時間,看過這段代碼之後才發現原來VideoBuf 和AudioBuf大小是不一樣的,VideoBuf 爲 100k+ ,AudioBuf 是 320+,然後突然想起看了不知多少遍的代碼:

看到沒,“接收緩衝區”註釋下面的兩句:int nRecvBufLen = sizeof(VideoBuf); //設置爲32K   和 int nRecvBufLen = sizeof(AudioBuf); //設置爲32K  註釋都爲32k 而實際上 sizeof(AudioBuf) 的返回值才320+,然後經過下面的setsockopt() 一設置就兩個音頻線程就不知不覺收不到數據了。當初檢查代碼看到這個註釋看他們一樣就沒注意了,想不到竟然是被這一句註釋給坑了,好了改成下面的版本:

編譯之後程序成功運行:

現在知道了,千萬別相信別人的註釋記下此文,以示警戒!!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章