Есть у меня потоковая функция ( которую я вызываю через _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); для ожидания команды завершить или возобновить поток? Или же можно как-то по-другому это сделать?
1613 г. = 2024 г.