Проблема с доступом к потоку во время работы этого потока
От: lebron  
Дата: 10.10.06 08:53
Оценка:
Столкнулся с такой проблемой например у меня есть класс MyClass в нём функция вроде этой


class MyClass
{
public:
  void Write();
  int a,b;

  void Stop(){a=0;b=0;};
};

void Write()
{
  while(1)
  {
    if(a==b)break;
    a++;
  }
}


я запускаю эту функцию в потоке делаю это с помошью функции StartThread так



HANDLE m_hThread;
CWinThread* pThread;

void CClass::StartThread()
{
  pThread = AfxBeginThread(Thread,this,THREAD_PRIORITY_NORMAL);
  m_hThread = pThread->m_hThread;
}

UINT CClass::Thread(LPVOID pParam)
{
  CClass* pc = (CClass*)pParam;
  if(!pc ->DoThread())return 1;
  return 0;
}

BOOL CClass::DoThread()
{
  m_MyClass.Write();
  return TRUE;
}


если я пытаюсь из другого потока вызвать функцию m_MyClass.Stop(); во время работы потока с функцией m_MyClass.Write(); происходит исключение.
пытался всё ограничивать критическими но они просто не дают мне выполнить то что я хочу например функцию m_MyClass.Stop(); это понятно ведь поток не освободил критическую секцию, получается что нужно ждать пока поток завешится но мне нужно уметь вызывать функции из класс MyClass во время выполнения потока. Пробовал завершать поток с помошью TerminateThread но после уничтожения при обрашении к функции класса MyClass тоже происходит исключение. Пожалуста подскажите в чем проблема.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.