본문 바로가기

쓰기

지난번에 올린 쓰레드 문제를 가진 녀석입니다.

왜인진 모르겠지만 돌아가지 않습니다 ㄱ-
조회 수 :
14035
등록일 :
2009.01.06
11:09:26
엮인글 :
https://arallab.hided.net/4209/834/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/4209

whoami

2009.01.06
18:56:17
찾았습니다.

문제는.. 생성자에서 쓰레드를 생성시킨 것이었습니다.

// AutoLoad.h
class CAutoLoad {
  ...
  public:
  void StartThread();
};

// AutoLoad.cpp
CAutoLoad::CAutoLoad()
{ // 생성자
   g_pLoadThread = NULL;  // 여기서 쓰레드 만들지 말것
   g_bRunning=false;
}

void CAutoLoad::StartThread()
{
  g_pLoadThread = AfxBeginThread(...);
  g_bRunning=true;
  g_pLoadThread->ResumeThread(); // 꼭 SUSPEND 로 만든 뒤 Resume 할 필요는 없지 않을까나..
}

// CustomDic2.cpp
CCustmoDic2::CCustomDic2()
{
  ...

  // 일단 제가 테스트할때는 여기서 생성 않았지만 어차피 CAutoLoad 생성자에서
  // 쓰레드 생성 않으니 그냥 CAutoLoad 클래스를 생성해도 될듯
  m_pAutoLoad = NULL;
}
...
void CCustomDic2::FileClear()
{
  // 아마 가장 처음에 불리는 m_pAutoLoad 관련 메쏘드가 이것인듯.
  if (!m_pAutoLoad)
  {
     m_pAutoLoad = new CAutoLoad; // 일단 쓰레드 생성 확인 방법을 잘 몰라 클래스 생성을 체크하는 방법을 사용.
     m_pAutoLoad->StartThread(); // 쓰레드 생성을 이렇게 따로 해줌
   }
   m_pAutoLoad->FileClear();
}

// 혹은.. 아예 CATPluginApp 에서 CCustomDic2 를 생성시키고 나서 바로 StartThread() 를 부르는
// 방법도 생각해 볼 수 있음.

Hide_D

2009.01.06
20:47:53
감사합니다! 즉시 확인해 볼게요!
List of Articles
공지 Talk [필독] 테스트필터 사용시 주의사항
라파에
155445   2008-08-03 2008-12-16 00:03