полуOFF про RegisterWaitForSingleObject
От: Аноним  
Дата: 20.09.06 09:41
Оценка:
Запостил это сообщение в раздел Win32 но, ввиду невысокой активности этого раздела, продублировал тут.

Речь идет о Win32 API'шной функции
BOOL RegisterWaitForSingleObject(
PHANDLE phNewWaitObject, // адрес хендла объекта ожидания
HANDLE hObject, // хендл объекта
WAITORTIMERCALLBACK Callback, // функция обратного вызова
PVOID Context // произвольный параметр
ULONG dwMilliseconds, // таймаут
ULONG dwFlags // флаги
);

Если передать этой функции флаг WT_EXECUTEINWAITTHREAD, то, судя по описанию, функция обратного вызова будет вызвана в самом ожидающем потоке (т.е том потоке, который сделал вызов RegisterWaitForSingleObject).

Получается что вызывающий поток ОБЯЗАТЕЛЬНО ДОЛЖЕН иметь очередь сообщений?
Вызов будет синхронизован циклом выборки сообщений и, соответственно, в функции обратного вызова не нужно парить голову с защитой переменных от конкурентного доступа к переменнм.

Во всяком случае я не понимаю как для потока без очереди сообщений, сделавшего вызов RegisterWaitForSingleObject, может быть сделан callback-вызов исполняющийся в этом же потоке.
Re: полуOFF про RegisterWaitForSingleObject
От: Ovl Россия  
Дата: 20.09.06 09:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Запостил это сообщение в раздел Win32 но, ввиду невысокой активности этого раздела, продублировал тут.


А>Речь идет о Win32 API'шной функции

А>BOOL RegisterWaitForSingleObject(
А>PHANDLE phNewWaitObject, // адрес хендла объекта ожидания
А>HANDLE hObject, // хендл объекта
А>WAITORTIMERCALLBACK Callback, // функция обратного вызова
А>PVOID Context // произвольный параметр
А>ULONG dwMilliseconds, // таймаут
А>ULONG dwFlags // флаги
А>);

А>Если передать этой функции флаг WT_EXECUTEINWAITTHREAD, то, судя по описанию, функция обратного вызова будет вызвана в самом ожидающем потоке (т.е том потоке, который сделал вызов RegisterWaitForSingleObject).


А>Получается что вызывающий поток ОБЯЗАТЕЛЬНО ДОЛЖЕН иметь очередь сообщений?

А>Вызов будет синхронизован циклом выборки сообщений и, соответственно, в функции обратного вызова не нужно парить голову с защитой переменных от конкурентного доступа к переменнм.

А>Во всяком случае я не понимаю как для потока без очереди сообщений, сделавшего вызов RegisterWaitForSingleObject, может быть сделан callback-вызов исполняющийся в этом же потоке.


очередь сообщений будет автоматически создана при надобности, так что насчет этого пункта не волнуйся
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: полуOFF про RegisterWaitForSingleObject
От: Left2 Украина  
Дата: 20.09.06 09:50
Оценка:
Ovl>очередь сообщений будет автоматически создана при надобности, так что насчет этого пункта не волнуйся

в вопросе насколько я понял речь идёт не об очереди сообщений, а о цикле выборки сообщений. и если очередь автоматически создастся, то вот цикл выборки надо всегда писАть руками.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: полуOFF про RegisterWaitForSingleObject
От: Ovl Россия  
Дата: 20.09.06 09:59
Оценка:
Здравствуйте, Left2, Вы писали:

Ovl>>очередь сообщений будет автоматически создана при надобности, так что насчет этого пункта не волнуйся


L>в вопросе насколько я понял речь идёт не об очереди сообщений, а о цикле выборки сообщений. и если очередь автоматически создастся, то вот цикл выборки надо всегда писАть руками.




The RegisterWaitForSingleObject function directs a wait thread in the thread pool to wait on the object. The wait thread queues the specified callback function to the thread pool when one of the following occurs:

WT_EXECUTEINWAITTHREAD — The callback function is invoked by the wait thread itself.

New wait threads are created automatically when required. The wait operation is performed by a wait thread from the thread pool


резюме — ожидать сигнала и вызывать callback будет не функция вызвавшая RegisterWaitForSingleObject, а тред в пуле. в ней же вызовется колбэк. цикл выборки не нужен
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.