Синхронизация обратного вызова

Асинхронный API WinInet (используемый для наиболее распространенных протоколов) оставляет синхронизацию механизма обратного вызова и вызывающего приложения в качестве упражнения для клиента. Это намеренно, потому что это позволяет максимальной степени гибкости. Протоколы по умолчанию и реализация моникера URL-адресов выполняют эту синхронизацию и гарантируют, что однопоточные и многопоточные приложения никогда не должны иметь дело с спором в стиле свободного потока. То есть интерфейсы IEnumFORMATETC и IBindStatusCallback вызываются только в их соответствующих потоках. Эта функция является прозрачной для пользователя URL-адреса mMoniker, если каждый поток вызывает IMoniker::BindTo служба хранилища и IMoniker::BindToObject имеет очередь сообщений.

Спецификация асинхронного моникера требует более точного контроля над приоритетом и управлением скачиваемыми файлами, чем разрешено winSock или WinInet. Соответственно, моникер URL-адреса управляет всеми скачивающими данными потока вызывающего объекта, используя (как часть его синхронизации) схему приоритета на основе спецификации IBinding.

URL-моникеры