Windows для профессионалов


Уведомления заданий


Итак, базовые сведения об объектах-заданиях я изложил. Единственное, что осталось рассмотреть, — уведомления. Допустим, Вам нужно знать, когда завершаются все процессы в задании или заканчивается все отпущенное им процессорное время. Либо выяснить, когда в задании порождается или уничтожается очередной процесс. Если такие уведомления Вас не интересуют (а во многих приложениях они и не нужны), работать с заданиями будет очень легко — не сложнее, чем я уже рассказывал. Но если они все же понадобятся, Вам придется копнуть чуть поглубже.

Информацию о том, все ли выделенное процессорное время исчерпано, получить нетрудно. Объекты-задания не переходят в свободное состояние до тех пор, пока их процессы нс израсходуют отведенное процессорное время. Как только оно заканчивается, система уничтожает всс процессы в задании и переводит его объект в свободное состояние (signaled scate). Это событие легко перехватить с помощью WaitForSingleObject (или похожей функции). Кстати, потом Вы можете вернуть объект-задание в состояние "занято" (nonsignaled state), вызвав SetInformationJobObject и выделив ему дополншельное процессорное время.

Когда я только начинал разбираться с заданиями, мне казалось, что объект-задание должен переходить в свободное состояние после завершения всех его процессов. В конце концов, прекращая свою работу, объекты процессов и потоков освобождаются, то же самое вроде бы должно происходить и с заданиями. Нo Microsoft предпочла сделать по-другому объект-задание переходит в свободное состояние после того, как исчерпает выделенное ему время. Поскольку большинство заданий начинает свою работу с одним процессом, который существует, пока не завершатся все eго дочерние процессы, Вам нужно просто следить за описателем родительского процесса — он освободится, как только завершится все задание. Моя функция StartRestrictedProcess как раз и демонстрирует данный прием.

Но это были лишь простейшие уведомления — более "продвинутые", например о создании или разрушении процесса, получать гораздо сложнее.


Начало  Назад  Вперед



Книжный магазин