- 締切済み
マルチスレッドプログラムでメモリが増加
VS6.0 で マルチスレッドのDBアクセスプログラムを作成しています。 現在、スレッドを起動し、スレッド内でデータベースオブジェクトを宣言、オープン、クローズしているだけなのにメモリが増えつづけてしまっています。 宣言方法等、何か問題がありましたら指摘ください。 (ちなみにスレッドから起動されたスレッドです。) ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ void __cdecl XXXApp::XXXThread( void* arg ) { CDatabase m_DB; m_DB.OpenEx( 接続文字列, CDatabase::useCursorLib|CDatabase::noOdbcDialog ); if( m_DB.IsOpen() == TRUE ){ m_DB.Close(); } _endthread(); } ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ すいませんがアドバイスをお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.1
_endthreadしているからでは? まず,MFCであるならば_endthreadではなくAfxEndThreadを使うべきです。 ただし,_endthreadにしろAfxEndThreadにしろ,これらを呼び出した場合,自動変数のデストラクタは呼び出されません。 C++的には,_endthreadやAfxEndThreadの利用は厳禁です。 スレッド関数を抜けると,スレッドは自動的に終了します。 C++ではそれに任せるのが一番です。
お礼
ありがとうございました。 早速試してみます。まずはお礼まで。
補足
Yure-Kichiさん 回答ありがとうございました。 _endThread()をのけて試してみたのですが現象は同じでした。 スレッドの最後で _CrtDumpMemoryLeaks(); をつけてヒープ領域に新たなメモリ確保を行っていないことは確かめられたのですがタスクマネージャーのメモリは増えていきます。 その他に考えられる要因や調査方法はありますでしょうか?