
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
10.06.2007, 18:04
|
|||
|---|---|---|---|
CreateWaitableTimer и APC - функции |
|||
|
#18+
Объясните пожайлуста: У Рихтера сказано след.: 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-ф-ия будет вызвана не то кол-во раз, которое задумывалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2028690]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
73ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 425ms |

| 0 / 0 |
