Re: [問題] BCB6 硬體作動時,記憶體不斷增加

看板C_and_CPP (C/C++)作者 (慢步調.. 很快樂)時間14年前 (2011/07/21 09:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
謝謝各位熱心的建議, 先前我試過 CodeGuard,沒抓出「有 new 但無 delete」的問題, 後來逐步 mark 掉一些執行的函數, 才發現,只要有執行到 Sleep 時,系統會等待時間後再繼續執行下一步, 雖然我是建立一個 Delay(mSec, bool Sync) 的函數去讓系統在 Sleep 時還能處理訊息, 但似乎還是會讓 WinAPI 在 delete 時發生問題,導致耗用的記憶體一直疊上去, 目前暫時放棄傳遞畫面到 TImage 上、並在上面繪圖的方案,缺點太多了, 暫時使用 DSPack 的 TVideoWindowEx2 元件, 只是,只要是執行變更解析度的程式區段時,TVideoWindowEx2上畫的線就會消失了, 目前只能先把它當作流程上的特殊規格看待了, 還望對 DSPack 有經驗的前輩們能夠提供一些建議,非常感謝~ ※ 引述《flylover (慢步調.. 很快樂)》之銘言: : 開發平台(Platform): Windows XPSP3 + BCB 6 : 額外使用到的函數庫(Library Used): DirectShow 9、DSPack : 問題(Question): : 搭配 DSPack 的 TFilter、TVideoWindow、TFilterGraph、TSampleGrabber : 由 SampleGrabber 擷取 buffer 的 Bitmap (bmp)資料後放到 TImage 元件上, : 正常運作情況下,工作管理員中的該程式所耗記憶體不太會改變(8KB~16KB), : 但只要程式開始透過 RS232 丟資料給硬體、並透過 Sleep(30) 後去接收回應的訊息時, : 工作管理員中該程式所耗的記憶體就會以數千 KB 成長, : 由於程式是用於控制多項硬體使用,整個流程上,常常會丟訊息給硬體, : 或等待數毫秒後,去讀取 RS232 Receive Buffer 上硬體的回覆訊息, : 隨便跑幾個動作,耗用記憶體就會高速成長,(兩分鐘內由 2MB 衝到 200MB 以上) : 直到系統顯示 Out of Memory 後當掉為止。 : 註: : RS232 丟訊息或接收訊息的程式,我建一個 Thread 去持續傳送讀取, : Sleep(30)亦是加在 Thread 中,試過 Application->ProcessMessage() 無效。 : 餵入的資料(Input): buffer from Frame Grabber Card : 預期的正確結果(Expected Output):程式耗用的記憶體只有微幅變動 : 錯誤結果(Wrong Output): : 耗用的記憶體隨著硬體的動作急速增加,沒有降下來的情況 : 程式碼(Code): : /*SampleGrabber OnBuffer() */ : SampleGrabber1->GetBitmap(Image1->Picture->Bitmap, buffer, buffer_length); : /*RS232 Thread*/ : /*send_msg(AnsiString str)是包來透過RS232傳遞command的函數, : receive_msg(AnsiString str)是包來接收 RS232 Receive buffer 的函數*/ : send_msg("IS"); : Sleep(30); : receive_msg(str); : Sleep(30); : 補充說明(Supplement): : 1.只要我把 SampleGrabber 那段 mark 掉,耗用的記憶體就不變了 : 2.查過一些文章,有提到 MSDN 寫道, : 透過 SampleGrabber 擷取圖片後,由於原設計是以 Thread 的方式不斷擷取, : 若進行GDI的行為(繪在 TImage 上),會有 new Thread 卻 delete 不掉的問題發生, : 但我改為: : /*SampleGrabber OnBuffer() */ : Graphics::TBitmap *bmp = new Graphics::TBitmap(); : SampleGrabber1->GetBitmap(bmp, buffer, buffer_length); : Image1->Picture->Bitmap->Assign(bmp); :   :  問題仍然依舊,想尋求版上的前輩們的建議,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.44.197
文章代碼(AID): #1E9tzh-2 (C_and_CPP)
文章代碼(AID): #1E9tzh-2 (C_and_CPP)