Re: [問題] BCB6 硬體作動時,記憶體不斷增加
看板C_and_CPP (C/C++)作者flylover (慢步調.. 很快樂)時間14年前 (2011/07/21 09:22)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章