Completion Port + KeInsertQueue + управление очередью
От: abdul.zycor  
Дата: 24.01.09 15:58
Оценка:
Допустим есть ситуация, когда X рабочих потоков, а в очереди Y поставленных запросов, выполнение запроса требует времени Z.
Т.е. скажем очередь не пуста и в данное время необходимо срочно провести деинициализацию. Самое на первый взгляд простое — поставить в очередь
с помощью PostQueuedCompletionStatus некие данные после анализа которых, рабочий поток завершиться. Но вся суть, что
PostQueuedCompletionStatus использует KeInsertQueue, т.е. запрос ставиться в конец очереди. Т.е. необходимо ставить запрос в начало очереди, что-бы
рабочий поток в первую очередь получал уведомление о том, что происходит деинициализация. А так выходит, что пока все предыдущие задания из очереди не будут выбранны, задание о завершении не получить. А деинциализироваться надо, например в случае выгрузки драйвера или при уведомлении от SCM для службы. Ситуация не частая, но бывает. Как выходить из такого положения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.