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