dポイントプレゼントキャンペーン実施中!

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();
}
◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎

すいませんがアドバイスをお願いします。

A 回答 (1件)

_endthreadしているからでは?


まず,MFCであるならば_endthreadではなくAfxEndThreadを使うべきです。
ただし,_endthreadにしろAfxEndThreadにしろ,これらを呼び出した場合,自動変数のデストラクタは呼び出されません。
C++的には,_endthreadやAfxEndThreadの利用は厳禁です。

スレッド関数を抜けると,スレッドは自動的に終了します。
C++ではそれに任せるのが一番です。

この回答への補足

Yure-Kichiさん
回答ありがとうございました。
_endThread()をのけて試してみたのですが現象は同じでした。

スレッドの最後で
_CrtDumpMemoryLeaks();
をつけてヒープ領域に新たなメモリ確保を行っていないことは確かめられたのですがタスクマネージャーのメモリは増えていきます。

その他に考えられる要因や調査方法はありますでしょうか?

補足日時:2009/09/09 21:39
    • good
    • 0
この回答へのお礼

ありがとうございました。
早速試してみます。まずはお礼まで。

お礼日時:2009/09/07 21:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!