小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

這下該不會阻塞了吧

 quasiceo 2013-01-12

  socket編程阻塞的問題搞了我?guī)讉€月,這段時間實在是太漫長了,其實我只是需要一個很簡單的函數(shù),那就是獲取網(wǎng)頁源碼,就是一個這么簡單的需要,我搞了幾個月。

最初我把所有的socket函數(shù)放入一個線程,在線程中設(shè)置超時時間,但這樣會遇到一個問題,如果線程的超時時間設(shè)為30秒,30秒沒接收完成就表達(dá)失敗,但在正常情況下網(wǎng)頁文件在30秒內(nèi)也有可能接收不完,所以這個方法宣告失效。

接著又找了個Linux下的多線程下載軟件,研究了一下代碼,寫了個多線程的網(wǎng)頁文件下載,這又把問題弄得更復(fù)雜了,可能是我的代碼沒控制好,程序雖然不會阻塞了,但下載的網(wǎng)頁源碼偶爾會不完整,遇到這個問題又拖了我?guī)讉€月。

幾個月后開始用Delphi了,不是說Delphi的第三方控件多么,用了IdHttp、WinHttp、HTTPCli這三個控件。首先接觸的是IdHttp,對IdHttp的第一印象就不好,居然Get百度或Google都會出錯,雖然有辦法解決,但始終感覺不爽,所以棄之、接著使用WinHttp,這個控件沒怎么用,我把他做成DLL,然后在VC中調(diào)用,好像也出錯,用著用著就無法獲取網(wǎng)頁源碼了,不知是什么問題。最后是HttpCli這個控件,這是ICS組件包中的一個控件,雖然比前兩個控件好用些,但最近幾天又發(fā)現(xiàn)了一個問題,那就是有內(nèi)存泄漏,以前一直沒發(fā)現(xiàn)。我測試了一下,不停的用HttpCli獲取網(wǎng)頁源碼,程序的內(nèi)存占用一直在漲,每Get一次漲幾K到幾十K不等,我操!最后還是不得不用Socket寫,TNND,花了幾個月的時間繞了這么一大圈。

最后的解決辦法是用線程來解決超時的問題,socket的阻塞函數(shù)用得比較熟,非阻塞函數(shù)不太會用,所以就想了一招,connect、send、 recv這三個函數(shù)我都放在線程里,并設(shè)置線程的超時時間,其中recv是接收一次就創(chuàng)建一個線程,并等待線程結(jié)束,比如每recv一次,就最多等待10秒,如果超過10秒鐘,那就直接退出,這樣我看你媽的還怎么阻塞。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多