マルチスレッド

[戻る]
カッシーニ 2005/08/09(火) 11:57:16
はじめまして。どなたかご存知方がおられましたら、宜しくお願いします。

SDIのマルチスレッドで動くプログラムを作成中なのですが、
ステップ実行するとビジー状態?(ほぼ固まる)になってしまいます。

スレッド関数内部ではステップ実行せず、別のクラスオブジェクトを生成し、
そのクラスの関数を呼び出しています。
そのクラスの関数内部でファイルアクセスしています。
ファイルアクセスの行でブレイクをはって、そこからステップ実行すると
関数の最後で動かなくなってしまいます。

ウィンドウを非表示にするとこの現象は起こりません。
どうやれば正常にステップ実行できるのでしょうか?

宜しくお願い致します。


// スレッド
void CMainFrame::MyThread(void *pParam)
{
 CTest t;

  while(TRUE) 
  {
    DWORD state = ::WaitForSingleObject(p->hQuitEvent, 1000);
    if (state == WAIT_OBJECT_0)
      break;
    else if(state == WAIT_TIMEOUT)
    {
      t.exec();
    }
  }

  _endthread();
}

void CTest::exec()
{
●FILE* p = fopen("C:\test.txt", "r"); // ブレイク

  if (p)
    fclose(p);
} // ←ビジー(固まる)

Blue 2005/08/09(火) 12:42:40
OSとVisual Studioのバージョンがわかりませんが(質問時に明記すべき)、

WindowsXpの場合

Xpの言語バーとVisual Studio のデバッガの相性が良くないらしいです。
http://www.wg7.com/w2ktips/#CTFMON

私もよくなります。(私の場合はあきらめてなるべくスレッドで動かさないようにしてい
ます。)

カッシーニ 2005/08/09(火) 16:34:13
[[解決]]
とりあえず「詳細なテキスト サービスをオフにする」をチェックして対応しようと思い
ます。

カッシーニ 2005/08/09(火) 16:34:43
Blue さん

ありがとうございました。

古いスレッドには追加発言できません。