21 Потоковая многозадачность (1061100), страница 3
Текст из файла (страница 3)
class CExampleView : public CView
{
protected:
// 1. событие не установлено; 2. сброс его будет автоматическим
CEvent event;
// другие описания класса
...…..
};
..........
UINT MyThread1(LPVOID pParam);
UINT MyThread2(LPVOID pParam);
void CExampleView::OnStart()
{
AfxBeginThread(MyThread1,this);
AfxBeginThread(MyThread2,this;
}
UINT MyThread1(LPVOID pParam)
{
CExampleView *ptrView=(CExampleView *)pParam;
CSingleLock syncObj(&(ptrView->event));
.......
syncObj.Lock(); // ожидание события
действия, выполняемые после события
syncObj.Unlock(); // освобождение объекта события
.......
return 0;
}
UINT MyThread2(LPVOID pParam)
{
CExampleView *ptrView=(CExampleView *)pParam;
.......
ptrView->event.SetEvent(); // сигнализирует о событии
return 0;
}
Как уже говорилось, объектами синхронизации являются не только семафоры и объекты события, а и критические разделы и исключающие семафоры. Их использование во многом похоже на рассматриваемые выше действия с семафорами и объектами событие. Стоит только отметить, что в некоторых ситуациях использование критических разделов позволяет более эффективно организовать работу с потоками.