none
スレッドが終了しない RRS feed

  • 質問

  • 初投稿になります、さくさくです。

    よろしくお願いします。

     

    開発環境:

    WindowsXP SP-2

    VisualStudio2005Pro SP-1

    VisualC++

    プロジェクト設定:"共通言語ランタイムサポートを使用しない"

     

    現在、main関数内でイベントを待ち、イベントを受けるとスレッドを生成し、イベントの種類によってそれぞれスレッド関数を実行するプロセスを開発しています。

    この機構は私が作ったものではなく、以前のプロジェクトから移植したもので、手を付けた事もありません。(私が作るのはスレッド関数の中身)

    今まではスレッドが無事に終了していて、この機構に問題は無いと思っています。

     

    が、最近になって.Netの機能を一部利用してみたくなり、とあるクラスAを作り、そのcppファイルのみ"clrを使用する"設定にしてみました。

    そのcppファイル内ではマネージソースを書いています。(それ以外は全てアンマネージ)

    コンパイルも通り、意図した通りに動いていたので問題ないと思っていたのですが、、、

     

    上記のmain関数によって生成されたスレッド関数F内で、クラスAをインスタンス化したり、クラスAのメンバ関数を呼び出すと、そのスレッド関数Fのスレッドが残ったままになっている事に気付きました。

    スレッド関数F自体はreturnしています。

    また、定義がヘッダーファイル内に書かれている関数だけを呼び出した場合は、スレッドは無事削除されていました。

     

    残ったままになっているというのは、

    デバッグ>>ウィンドウ>>スレッド

    で開かれるスレッドウィンドウを見ると、スレッド関数Fを実行していたスレッドIDのリストが残ったままになっているのです。

    名前、場所、優先順のカラムは空欄ですが、中断のカラムには"0"が入っています。(実行中?)

    http://www010.upp.so-net.ne.jp/forte/images/Thread.JPG

     

    クラスAを使用するスレッド関数Fを呼ぶ度にこの空欄のスレッドが残り、どんどん増えて行きます・・・

    どうやらクラスAに限らず、cppファイルを"clrを使用する"に設定すると、どのクラスでも同じ事が起きるようでした。

     

    この、スレッドが残ったままになる原因、または対処法があれば教えてください。。

    2007年11月23日 7:52