Можно ли запустить пользовательский поток в приложении C ++, размещенном на IIS?

StackOverflow https://stackoverflow.com/questions/271833

Вопрос

Мы размещаем приложение на основе C ++ для WebServices в IIS и обнаруживаем, что когда мы пытаемся запустить наши собственные потоки C ++, в IIS происходит сбой. Потоки основаны на boost.thread, который явно соответствует стандартному API потоков Windows.

Причина, по которой мне нужно запустить поток, состоит в том, чтобы прослушивать многоадресные передачи с нашего сервера среднего уровня, чтобы поддерживать актуальность локального кэша. Если не считать написания еще одного процесса для нас, я в растерянности, что еще я могу сделать.

Итак, вопрос в том, должно ли это работать? Существуют ли какие-то ограничения на выполнение подобных вещей с IIS?

Это было полезно?

Решение

Похоже, вы создаете постоянный поток, который дольше, чем время жизни запроса, который его инициирует. Вы не упоминаете, является ли это ASP.NET C ++ / CLI, Managed C ++ или расширением ISAPI или фильтром, или даже CGI.

Концептуально код, который вызывается IIS, должен «жить». за время существования запроса. Код, который выполняется дольше, будет зависеть от перезапуска IIS пулов приложений.

Лучше всего иметь другой процесс, который прослушивает уведомления, и поддерживать кэш в этом процессе. Затем вы можете использовать общую память (см. Boost.Interprocess ) для доступа к этому кешу из вашего веб-сервиса.

Другие советы

Я не знаю о C ++, но в моем приложении на C # ASP.NET я создаю потоки, и он работает нормально. Являются ли .NET "реальными" потоки? Я не знаю ... но они ведут себя так, как будто вы хотите, чтобы нить вела себя. Может быть, вы можете использовать только эту часть вашего приложения в ASP.NET C #?

Если не написать еще один процесс для нас, я в растерянности, что еще я могу сделать.

Есть много других решений, кроме использования дополнительной темы. Например, опрос + неблокирующий ввод-вывод будет одним из вариантов.

Создание потока, скорее всего, не проблема - это то, что вы делаете в этом потоке. Я хотел бы взглянуть на код, который разделяет объекты, которые также используются потоками, которые создает IIS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top