Как правильно приостановить поток?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 30.01.17 09:43
Оценка:
Есть у меня потоковая функция ( которую я вызываю через _beginthreadex ):

unsigned int __stdcall  MyThreadFunc(void* pParam)
{
  int  i;
  MyStruct *pMySTruct = (MyStruct*)pParam;
  volatile int *threadflag = &(pMyStruct->threadflag);
  int  numworkmode = pMyStruct->numworkmode;
  CInitConds  ic = pMyStruct->ic;
  int  iterQnty = pMyStruct->iterQnty;
  double  sgm = pMyStruct->sgm;
  double *dlt = pMyStruct->dlt;
  CMyPage *pMyPage = pMyStruct->pMyPage;
  bool *pisthreadfinished = &(pMyStruct->isthreadfinished);
  pMyPage->Calculate(*(pMyPage->m_pIc),&iterQnty,&sgm,&dlt[0],numworkmode,threadflag); // вызов функции, которая производит математические вычисления
  pMyStruct->iterQnty = iterQnty;
  pMyStruct->sgm = sgm;
  pMyStruct->ic = *(pMyPage->m_pIc);
  memcpy(pMyStruct->dlt,dlt,10*sizeof(double));
  *pisthreadfinished = true;
  return 0;
}


внутри функции CMyPage::Calculate я написал следующий код на случай приостановки работы потока:

if (*threadflag==2)
// если поток был приостановлен
{
    while ((*threadflag!=0)&&(*threadflag!=1))
    // пока не была дана команда выйти из потока (*threadflag==0) или возобновить работу потока (*threadflag==1)
    {
        Sleep(1000); // ожидание в течение одной секунды
        if (*threadflag==0)
        // если была дана команда выйти из потока
        {
            FreeMemory(); // освобождение ресурсов
            return;
        }
    }
}


Вопрос состоит в следующем--правильно ли я делаю, что организовал цикл while ((*threadflag!=0)&&(*threadflag!=1)) и в нём вызываю команду Sleep(1000); для ожидания команды завершить или возобновить поток? Или же можно как-то по-другому это сделать?
CFA (USA) delendam esse.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.