Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / CreateWaitableTimer и APC - функции / 2 сообщений из 2, страница 1 из 1
10.06.2007, 18:04
    #34587346
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateWaitableTimer и APC - функции
Объясните пожайлуста:

У Рихтера сказано след.:

HANDLE hTimer - CreateWaitableTimer(NULL, FAISE, NULL);
SetWaitableTimer(hTimer, ..., TimerAPCRoutine, );
WaitForSingleObjectEx(hTimer, INFINITE, TRUE);

Никогда ие пишите такой код, потому что вызов WaitForSingleObjectEx на деле заставляет дважды ожидать таймер — по описателю hTimer и в "тревожном" состоянии Когда таймер перейдет в свободное состояние, поток пробудится, что выведет eго из "тревожного" состояния, и вызова АРС-функции не последует.


Вызова APC - ф-ии действительно не происходит, но я не понял самого объяснения, почему не происходит и что значит "заставляет на деле дважды ожидать таймер" ??


APC - ф-ия вызывается из того потока, который обратился к SetWaitableTimer в момент срабатывания таймера, — но только если вызывающий поток находится в "тревожном" (aler table) состоянии, т. e. ожидает этого в вызове одной из функций SleepEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx, MsgWaitForMultipleObjectsEx или SignalObjectAndWait Если же поток этого не ожидает в любой из перечисленных функций, система не поставит в очередь АРС-функцию таймера. Тем самым система не даст АРС-очереди потока переполниться уведомлениями от таймера, которые могли бы впустую израсходовать колоссальный объем памяти.


И еще: когда использую SleepEx(INFINITE, TRUE) таймер срабатывает и ф-ия APC вызывается, но если APC - ф-я не успевает отработать до след. срабатывания таймера, то она опять попадает в очередь, хотя др. SleepEx далее нет. Выходит, что SleepEx ожидание продолжает быть активным до тех пор пока не отработает APC-функция??

Тем самым система не даст АРС-очереди потока переполниться уведомлениями от таймера, которые могли бы впустую израсходовать колоссальный объем памяти.

В такой ситуации очередь потока может не только переполнится, но и APC-ф-ия будет вызвана не то кол-во раз, которое задумывалось.
...
Рейтинг: 0 / 0
12.06.2007, 15:56
    #34589724
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateWaitableTimer и APC - функции
up
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / CreateWaitableTimer и APC - функции / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]