Приложение RegNotify
октября 12 2009 by admin in АдминистрированиеПриложение RegNotify («05 RegNotify.exe») демонстрирует асинхронное использование RegNotifyCbangeKeyValue ). Файлы с исходным кодом и ресурсами для него находятся в каталоге 05-RegNotify на прилагаемом к книге диске. Эта программа просто отслеживает уведомления для разделов реестра, указанных пользователем.
После запуска приложения пользователь должен ввести название раздела реестра, уведомления об изменениях которого он хочет получать. Сам мониторинг запускается кнопкой Watch.
Процесс получения уведомлений работает таю RegNotify создает второй поток, в котором запущен цикл, постоянно вызывающий RegNotifyCbangeKeyValue для заданного раздела и отображающий в текстовом поле информацию о значениях. При появлении уведомления генерируется сообщение, из-за чего WaitForSingleObjectEx возвращает WAIT_OBJECT_0. Получив WAIT_OBJECT_0, функция переходит к ожиданию следующего уведомления.
Когда пользователь закрывает приложение, первичный поток посылает потоку, ожидающему уведомления, асинхронный вызов процедуры (asynchronous procedure call, APC) пользовательского режима, что вызывает завершение функции WaitForSingleObjectEx со значением WAIT_IO_COMPLETION. Цикл заканчивается, а следовательно, поток, ожидающий уведомления, завершается.
Использование АРС для связи между потоками — иногда лучшее решение, так как этот процесс может оказаться очень эффективным. При этом не требуется создание объектов ядра, например, семафоров или событий. Применяя для межпотокового взаимодействия АРС, вы должны часто создавать функции обратного вызова АРС, используемые как шаблонные функции для АРС.