Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП_УМК 2012 каз для 5В070400.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

5.1 Оқиғалар

Ядроның соңғы объектісі синхрондауға қалған – ол оқиға. Бұл объектіні басқа ағындарды ақпараттандыру үшін қолданады. Яғни, бір оқиға болған жайлары туралы хабарлау.

Оқиғаның ең қосымша мүмкіншілігі, ол сигналдық күйге бір дескриптор келген кезде, бірге күтуден бірнеше ағындарды босату мүмкіндігі еді. Оқиға автоматты түрде босатылатын және қолмен босатылатын болып екіге бөлінеді. Бұл оқиғаның мүмкіншілігі CreateEvent функциясын шақырғанда орнатылады.

- Қолмен босатылатын оқиға, бұл оқиғаны күтіп тұрған ағындардың біреуінеде белгі бермейді.

- Автоматты түрде босатылатын оқиға, бұл оқиғаны күтіп тұрған бір ғана ағынға белгі береді және автоматты түрде босатылады.

CreateEvent, OpenEvent, SetEvent, ResetEvent және PulseEvent функциялары оқиғалармен қолданады.

HANDLE CreateEvent ( LPSECURITY_ATTRIBUTES lpsa, BOOL fManualReset, BOOL fInitialState, LPCTSTR lpszEventName)

OpenEvent функциясын басқа үрдістерден бар оқиғаларды ашу үшін қолданады.

Оқиғаларды басқаруда үш функция қолданады:

BOOL SetEvent (HANDLE hEvent)

BOOL ResetEvent (HANDLE hEvent;

BOOL PulseEvent (HANDLE hEvent)

Ағын SetEvent функциясы арқылы оқиғаны сигналдық күйге ауыстыра алады. Егер оқиға автоматты түрде босатылса, онда жалғыз күтуші ағын босатылады. Ал оқиға болса автоматты түрде сигналсыз күйге ауысады.

Егерде оқиға қолмен босатылса, онда ағын берілген оқиғаға қатысты ResetEvent функциясын шақырмайынша, оқиға сигналдық күйде қалады.

PulseEvent функциясы барлық оқиғаларды босатады. WaitForMultipleObjects функциясын барлық оқиғаларды күтуде қолданғанда абай болыңыз.

Оқиғаларды қолдануда төрт моделі

SetEvent және PulseEvent функцияларымен бірге орнатылатын қолмен және автоматты оқиғаларды орнатуда төрт жолы бар.

ЕСКЕРТПЕ: Оқиғаны дұрыс пайдаланбау жарысу күйін тудыруы мүмкін, бұл өз кезегінде қателерді тудырады. Автоматты түрде босатылатын оқиғаны, мысалға келтіретін болсақ. Пуржинасы бар есіктің механизмі сияқты қарастырсақ, яғни есік ашылғаннан кейін жабылып қалады. Ал қолмен босатылатын оқиғада пуржинасы жоқ есік сияқты, ашық күйде қалады. PulseEvent функциясын қарастыратын болсақ, онда есік ашылады және тез қайтадан бір күтіп тұрған ағын өткеннен кейін жабылады. Ал SetEvent функциясында есік ашылады және ашық күйде қалады.

Автобосатылатын оқиға

Қолмен босатылатын оқиға

SetEvent функциясы

Бір ағын босатылады. Егерде берілген оқиғаға байланысты бірде-бір ағын күту орындалмаса, одан кейінгі күтуде болатын ағын, тез арада босатылады. Оқиға автоматты түрде босатылады.

Сол мезеттегі күтіп тұрған барлық ағындар босатылады. Бір ағынмен босатылмағанша, оқиға сигналдық күйде қалады.

PulseEvent функциясы

Бір ғана ағын босатылады, егерде ағын берілген оқиғаға байланысты күту орындалып жатса.

Сол мезеттегі күтіп тұрған барлық ағындар босатылады, ал одан кейін оқиға босатылады. Егерде бірде бір күтіп тұрған ағын болмаса, онда оқиғаға бір ағынның күтуі басталмайынша, оқиға сигнал күйінде қалады.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]