Я использую интерфейс IAdviseSink для приема данных от OPC-серверов стандарта 1.0 (сервер с некоторым периодом отправляет клиенту через IAdviseSink::OnDataChange некоторые данные). Мой sink находится в многопоточном апартаменте.
В операционной системе Windows 2000 возникла следующая проблема — если я в клиенте не успеваю обрабатывать вызовы IAdviseSink::OnDataChange, то происходит взрывное увеличение количества одновременных входящих вызовов, и, соответственно, такое же увеличение количества потоков, в которых эти вызовы обрабатываются. Стек при вызове выглядит следующим образом —
Это очень похоже на асинхронный вызов синхронного интерфейса Win2000, но серверы были выпущены до выхода Windows 2000 и, понятное дело, никаких специфичных для Win2000 средств использвать не могут. Получается, что Win2000 сама решила, что, поскольку OnDataChange не имеет out-параметров, то ее вполне можно вызывать асинхронно с точки зрения сервера.
Кто нибудь сталкивался с подобной проблемой?
P.S. Проблема обнаружилась, после того, как программа упала, когда количество потоков перевалило за тысячу.