Последним из типов объектов синхронизации ядра являются события (events). Объекты события используются чтобы сигнализировать другим потокам о наступлении какого-либо события, например, о появлении нового сообщения. Переход в сигнальное состояние единственного объекта события выведет из состояния ожидания одновременно до несколько потоков. Объекты события делятся на сбрасываемые вручную и автоматические, это их свойство устанавливается при вызове CreateEvent.
Сбрасываемые вручную события (manual-reset events) могут сигнализировать одновременно всем потокам, ожидающим наступления этого события, и переводятся в несигнальное состояние программно.
Автоматически сбрасываемые события (auto-reset event) сбрасываются самостоятельно после освобождения одного из ожидающих потоков, тогда как другие ожидающие потоки продолжают ожидать перехода события в сигнальное состояние.
События используют пять новых функций: CreateEvent, OpenEvent, SetEvent, ResetEvent и CreateEvent. HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpsa, BOOL bManualReset, BOOL bInitialState, LPTCSTR lpEventName) Чтобы создать событие, сбрасываемое вручную, необходимо установить значение параметра bManualReset равным True. Чтобы сделать начальное состояние события сигнальным, установить равным True значение параметра bInitialState. Для открытия именованного объекта события используется функция OpenEvent, это может сделать и другой процесс.
Для управления объектами событий используются следующие три функции:
BOOL SetEvent (HANDLE hEvent)
BOOL ResetEvent (HANDLE hEvent)
BOOL PulseEvent (HANDLE hEvent)
Использование функцииShellExecute
#include <shellapi.h> // открыть страницу в сети Интернет ShellExecute(NULL, "open", "http://www.MyWebPage.com", NULL, NULL, SW_SHOWNORMAL); // открыть текстовый файл, расположенный в папке программы ShellExecute ( NULL, "open", "Readmy.txt", NULL, NULL, SW_SHOWNORMAL); // вывести на печать файл Word из текущей папки ShellExecute(NULL, "print", "Document.doc", NULL, NULL, SW_SHOWMINIMIZED); // найти папку Windows на корневом диске ShellExecute(NULL, "find", "c:\\Windows", NULL, NULL, SW_HIDE); // просмотреть папку Windows ShellExecute(NULL,"explore","c:\\Windows",NULL,NULL, SW_SHOWNORMAL); // написать письмо LPCTSTR lpMail = "mailto:MyBox@service.com?subject=Anekdot \&cc=MyBox@service.com"; ShellExecute ( NULL, NULL, lpMail, NULL, NULL, SW_SHOWNORMAL); // запустить программу из текущей папки ShellExecute ( NULL, NULL, "MyProgramm.exe", "-mycommand", NULL, SW_SHOWNORMAL) ; // просмотреть графический файл ShellExecute(NULL,"open","d:\\images\\pricol.bmp",NULL,NULL,SW_SHOWNORMAL)
Кроме основной функции ShellExecute, существует ее расширенный вариант, именуемый ShellExecuteEx. Отличается она, дополнительной поддержкой свойств объектов СОМ. В большинстве случаев достаточно возможностей базовой функции.