Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Определение последнего вызова "колбэка" BindIoCompletionCallback   Найти похожие ветки 

 
Riply ©   (2007-04-04 11:19) [0]

Здравствуйте !
Допустим, мы пытаемся сделать что-то вроде:
var
hDevice: THandle;
OverLapCallBack: LPOVERLAPPED_COMPLETION_ROUTINE;
////////////
BindIoCompletionCallback(hDevice, OverLapCallBack, 0);
////////////
Теперь нам надо остановить работу.
CloseHandle(hDevice);
Мечта: дожидаемся события "последнего вызова" OverLapCallBack.
Дождавшись, выполняем какие-то действия, несовместимы с вызовом OverLapCallBack.
Как это можно реализовать ?
Счетчик запросов\ответов... - не факт, что при таком закрытии их значения будут совпадать.
Анализ ошибки в OverLapCallBack (например, ждать что нибудь типа INVALID_HANDLE),
можно и не дождаться (перестанет вызываться по другой причине)


 
Сергей М. ©   (2007-04-04 11:46) [1]

Вот ты который раз уже мусолишь этот вопрос, а воз и ныне там)
При этом я в который раз задаю тебе вопрос, чем тебе не угодила колбэк-схема с MsgWaitForMultipleObjectEx+Read/WriteFileEx ? Зачем усложнять себе жизнь, если все решается гораздо проще, понятней и изящней ?


 
Riply ©   (2007-04-04 12:08) [2]

>[1] Сергей М. ©   (04.04.07 11:46)
Привет ! А я там ответила:
>[17] Riply ©   (30.03.07 17:51)
>(если конесно я все правильно понимаю)
>в MsgWaitForMultipleObjectEx, все равно, придется обходить ограничение MAXIMUM_WAIT_OBJECTS.
>И снова наши взоры устремяться к RegisterWaitForSingleObject, либо созданию "ждущего" пула вручную.

Ты, наверное, просто не видел.
Да и потом с RegisterWaitForSingleObject у меня уже все работает "на ура" (тьфу - тьфу)
Нитей в сервере - кот наплакал  :)
Теперь хочу разобраться с BindIoCompletionCallback. Если удасться справиться с неувязочками типа САБЖА,
то код получиться такой маленький, прозрачный и красивый - аж просто загляденье ! :)


 
Сергей М. ©   (2007-04-04 12:20) [3]


> придется обходить ограничение MAXIMUM_WAIT_OBJECTS


Не надо обходить никакие ограничения, MsgWaitForMultipleObjectEx нужен лишь для перевода тек.потока в alertable-состояние - только в этом состоянии будут вызываться колбэки. В кач-ве объекта ожидания (или нескольких объектов ожидания) можно указать любое допустимое кол-во хэндлов, даже не имеющих отношения к ивентам в составе overlapped-структур - функция возвратит управление, как только будет выполнен первый же колбэк в очереди колбэков.

Почитай внимательно справку к MsgWaitForMultipleObject и FileIOCompletionRoutine (см. Read/WriteFileEx)


 
Riply ©   (2007-04-04 12:41) [4]

>[3] Сергей М. ©   (04.04.07 12:20)
Ты, наверное, на MsgWaitForMultipleObjectEx
уже собаку съел, раз так настойчиво советуешь ?
Придется последовать совету и проверить:
так ли все сладко, как ты расписываешь :)
P.S.
А сабжевый вопрос, мне все равно интересен.
Надо же раз и навсегда разобраться с семейством этих функций.


 
Сергей М. ©   (2007-04-04 12:46) [5]

В кач-ве иллюстрации :


MAX_CLIENTS = 65536;

var
 i: Integer;
 povl: POverlapped;

ovl_array: array[0..MAX_CLIENTS-1]  of TOverlapped;

procedure ReadCallback(ErrCode, BytesRead: DWord; AOvl: POverlapped); stdcall;
begin
 povl := AOvl; //фиксируем данные о клиентском пайпе, завершившем операцию
end;
..

hEvent := CreateEvent(..); //фиктивный ивент для подстановки в ф-цию ожидания

...
for i := 0 to MAX_CLIENTS - 1 do begin
 ovl_array[i].hEvent := i; //поле hEvent идентифицирует пайп
 ReadFileEx(hPipes[i], .., @ovl_array[i], @ReadCallback);
end;
..

case MsgWaitForMultipleObjectsEx(1, hEvent, False, INFINITE, True) of
 WAIT_IO_COMPLETION: ShowMessage(IntToStr(povl.hEvent));
 WAIT_OBJECT_0+1: ... обрабатываем сообщения тек.потоку или его окнам ..
end;


 
Riply ©   (2007-04-04 13:40) [6]

> [5] Сергей М. ©   (04.04.07 12:46)
Спасибо.


 
Сергей М. ©   (2007-04-04 13:42) [7]


> Riply ©   (04.04.07 13:40) [6]


Ну ?
Оценила что ли ?)

И каковО резюме ?)


 
Riply ©   (2007-04-04 13:47) [8]

> [7] Сергей М. ©   (04.04.07 13:42)
>И каковО резюме ?)
Резюме выдам, когда набросаю скелет сервера и прогоню его пару раз.
Но внешне, выглядит также сладко, как ты и обещал :)


 
Сергей М. ©   (2007-04-04 13:52) [9]


> Riply ©   (04.04.07 13:47) [8]


"Сладостей" я тебе не обещал).. Да ты и не просила)
Я лишь показал тебе один из напростейших и довольно, imho, изящных способов избавления от геморроя с упомянутым ограничением



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
15-1175082295
0leg
2007-03-28 15:44
2007.04.22
Функция замены специальных HTML символов


15-1174990027
eXPell
2007-03-27 14:07
2007.04.22
С чем это может быть связано?)


1-1172650540
Oleg_teacher
2007-02-28 11:15
2007.04.22
сокеты


2-1175556479
Alll
2007-04-03 03:27
2007.04.22
Циклы


1-1172648569
serg_mds
2007-02-28 10:42
2007.04.22
Разработка OPC сервера