Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: WIN API  (Прочитано 13581 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sss
Специалист

ru
Offline Offline

« : 22-05-2013 07:58 » 

Привет.

Вот уже более 10 лет программирую в Windows. Думал - ну ничего не упускаю, книги читаю. И тут разбираясь в примере по фильтрам ISA
от Microsoft наткнулся  на вызов функции RegisterWaitForSingleObject и обомлел. Почему ни в одной книге я не вычитал про неё? Может завести
тему "WIN API обмен опытом" где нибудь в "Техно"?
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 22-05-2013 08:11 » 

это вроде асинхронного ожидания события ?
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 22-05-2013 08:48 » 

Как же он недокументированный, когда в MSDN описан и в .NET обёртка есть у класса WaitHandle?

Цитата: Алексей++
асинхронного ожидания
Ну ты сказал Улыбаюсь

Это callback в случае события - обычный обработчик, такой же как у системного таймера или сигнала. Да, вне потоков процесса.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sss
Специалист

ru
Offline Offline

« Ответ #3 : 22-05-2013 08:53 » 

Как же он недокументированный, когда в MSDN описан и в .NET обёртка есть у класса WaitHandle?


Да я не говорил что недокументированный. Неописанный (редко описываемый?) в книгах по системному программированию...
При этом функция мощная и реализована давно...
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 22-05-2013 09:06 » 

Dimka, и что не так ?
Записан

sss
Специалист

ru
Offline Offline

« Ответ #5 : 22-05-2013 14:56 » 

Dimka, и что не так ?

Наверное всё же это не асинхронный ввод/вывод. Асинхронный ввод/вывод подразумевает асинхронное прерывание потока - как например
в результате вызова QueueUserAPC. Хотя даже и с перекрытым вводом/выводом тоже не сравнишь. Это наверное всё же синхронный
ввод/вывод для пула. Я вот не видел этой функции в книгах, поэтому сложно, даже не процитировать какую нибудь  глыбу..
Записан

while (8==8)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 22-05-2013 15:40 » 

Алексей++, ожидание всегда синхронное. Всё асинхронное ничего не ждёт, в этом и суть асинхронности - не согласовывать свои действия с другими по времени Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 22-05-2013 15:52 » 

sss, я ничего про ввод/вывод и не говорил )

Dimka, под синхронным я понимаю - зашли в тот же WaitForSingleObject() и упёрлись, пока событие не произойдёт )

а здесь, как я понимаю, управление возвращается ?
Записан

sss
Специалист

ru
Offline Offline

« Ответ #8 : 22-05-2013 16:18 » 

Dimka, под синхронным я понимаю - зашли в тот же WaitForSingleObject() и упёрлись, пока событие не произойдёт )

а здесь, как я понимаю, управление возвращается ?

Это перекрытый ввод/вывод (?). Ну я не настаиваю Улыбаюсь.  Просто почти всегда структура OVERLAPPED используется когда нет
ожидания. А за ней GetOverlappedResult как правило в паре с  неявным DeviceIoControl...

Управление возвращается. Я пока не готов говорить - самое интересное увеличивается ли счётчик потоков процесса.. Или
используются рабочие системного процесса?
« Последнее редактирование: 22-05-2013 16:29 от sss » Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 22-05-2013 16:28 » 

я события использую для ожидания завершения потока, к примеру. Или сигнала из потока ) Для ввода/вывода не доводилось
Записан

sss
Специалист

ru
Offline Offline

« Ответ #10 : 22-05-2013 16:45 » 

я события использую для ожидания завершения потока, к примеру. Или сигнала из потока ) Для ввода/вывода не доводилось

Ну я вообще то тоже Улыбаюсь. Кроме сетевых движков - там использую только порты завершения.

Наверное ты хотел сказать - ожидаю на хэндле потока а не на событии..
« Последнее редактирование: 22-05-2013 16:47 от sss » Записан

while (8==8)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 22-05-2013 17:02 » 

Цитата: Алексей++
а здесь, как я понимаю, управление возвращается ?
Куда возвращается? Никуда не возвращается. Ты таймер использовал (который системный, не WM_TIMER)? Вот тоже самое, только срабатывает не по таймауту, а по установке флага события. И точно так же работает.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 22-05-2013 17:04 » 

sss, и хендл, и событие
Записан

v2
Помогающий

ua
Offline Offline

« Ответ #13 : 22-05-2013 18:29 » 

> Я вот не видел этой функции в книгах, поэтому сложно, даже не процитировать какую нибудь  глыбу..
+1.

А я тут думаю, как мне в монопотоке сделать оv запись без лишнего телодвижения. И вот, -  спасибо.





Добавлено через 1 час, 8 минут и 12 секунд:
Экспресс тест RegisterWaitForSingleObjec:
в основном она для Thread Pool, с которым пока серьезно не разбирался.

Как я понял флаги, при отсутствии Thread Pool, влияют на момент создания доп потока, -
on_callback или on_RegisterWaitForSingleObject.

Ну что ж, будет в арсенале, + повод присмотреться к этому Pool Улыбаюсь

« Последнее редактирование: 22-05-2013 19:37 от v2 » Записан
sss
Специалист

ru
Offline Offline

« Ответ #14 : 23-05-2013 00:47 » 


Ты таймер использовал (который системный, не WM_TIMER)? Вот тоже самое, только срабатывает не по таймауту, а по установке флага события. И точно так же работает.


RegisterWaitForSingleObject работает с почти любым объектом синхронизации, в том числе и  waitable timer ..
Записан

while (8==8)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines