Здравствуйте, RussianFellow, Вы писали:
RF>То есть код должен иметь примерно такой вид:
Нет. В таком цикле поток будет постоянно съедать процессорное время.
Надо использовать события и ожидать их в потоке через
WaitForMultipleObjects
Чисто для примера:
HANDLE hEvents[2];
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
DWORD dwEvent = 0;
bool bExit = false;
while (!bExit)
{
dwEvent = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);
switch (dwEvent)
{
case WAIT_OBJECT_0:
// событие на выход
bExit = true;
break;
case WAIT_OBJECT_0 + 1:
//событие надо считать
// тут идут какие-то расчёты
break;
default:
// что-то пошло не так, выходим
bExit = true;
}
}
return dwEvent;
}
int main()
{
hEvents[0] = CreateEvent(NULL, FALSE, FALSE, NULL); // событие ожидается в потоке когда поток надо завершить
hEvents[1] = CreateEvent(NULL, FALSE, FALSE, NULL); // событие ожидается в потоке когда надо просыпаться и что-то считать
DWORD tid = 0;
CreateThread(NULL, 0, ThreadProc, NULL, 0, &tid); // создаем рабочий поток
SetEvent(hEvents[1]); // надо считать
return 0;
}
В MFC есть какие-то классы обёртки над всей этой многопоточностью, но я слабо разбирался с MFC реализацией. Надо читать книги по этой библиотеке.
Вообще, на мой взгляд многопоточность это не та тема, которую можно освоить за 5 минут на форуме. Нужно читать соответствующую литературу.