Информация об изменениях

Сообщение WinInet + ASYNC mode + Завершение работы от 30.01.2019 2:50

Изменено 30.01.2019 3:00 RickD

WinInet + ASYNC mode + Завершение работы
Здравствуйте.

Изучаю работу WinInet в асинхронном режиме. Задача простая — скачать содержимое сайта. Есть пару вопросов.

1) Если я делаю InternetSetStatusCallback(hRequest, NULL), гарантирует ли это, что больше Callback функция в других потоках для hInternet не будет вызываться?
Иными словами, каков механизм вызова Callback функций системой? Windows накапливает асинхронные операции в очереди и после вызова InternetSetStatusCallback(hRequest, NULL) выплевывает в Callback всю оставшуюся очередь? Или после возвращения из Callback функции Windows проверяет, и если указатель на Callback функцию NULL, то дальнейших вызовов гарантированно нет?

2) Если задать несуществующий url, то в Callback между приходом INTERNET_STATUS_RESOLVING_NAME и INTERNET_STATUS_REQUEST_COMPLETE проходит 2.5 секунды. Когда я пробую в этот момент закрыть приложение и перед этим из другого потока вызываю InternetCloseHandle(hRequest), это никак не ускоряет приход INTERNET_STATUS_REQUEST_COMPLETE и приложение вынуждено ждать 2.5 секунды. Хотелось бы это как-то ускорить.
WinInet + ASYNC mode + Завершение работы
Здравствуйте.

Изучаю работу WinInet в асинхронном режиме. Задача простая — скачать содержимое сайта. Есть пару вопросов.

1) Если я делаю InternetSetStatusCallback(hRequest, NULL), гарантирует ли это, что больше Callback функция в других потоках для hRequest не будет вызываться?
Иными словами, каков механизм вызова Callback функций системой? Windows накапливает асинхронные операции в очереди и после вызова InternetSetStatusCallback(hRequest, NULL) выплевывает в Callback всю оставшуюся очередь? Или после возвращения из Callback функции Windows проверяет, и если указатель на Callback функцию NULL, то дальнейших вызовов гарантированно нет?

2) Если задать несуществующий url, то в Callback между приходом INTERNET_STATUS_RESOLVING_NAME и INTERNET_STATUS_REQUEST_COMPLETE проходит 2.5 секунды. Когда я пробую в этот момент закрыть приложение и перед этим из другого потока вызываю InternetCloseHandle(hRequest), это никак не ускоряет приход INTERNET_STATUS_REQUEST_COMPLETE и приложение вынуждено ждать 2.5 секунды. Хотелось бы это как-то ускорить.