Нужна ли мне очередь на моем COM-сервере? - PullRequest
1 голос
/ 14 мая 2009

У меня есть сервер COM EXE вне процесса, предоставляющий API из одного из его интерфейсов. Функциональность этого API заключается в публикации URL.

Мой клиент будет создавать экземпляр COM-сервера и вызывать этот API с новыми URL-адресами.

Каждый раз, когда клиенту необходимо опубликовать URL-адрес, он создает экземпляр этого COM-сервера.

Нужно ли создавать очередь на COM-сервере для отслеживания всех URL-адресов, опубликованных клиентом, и чтобы убедиться, что ничего не потеряно?

Что мне интересно, если каждый раз, когда я создаю COM-объект, запускается новый процесс? Если это так, я думаю, мне не нужно реализовывать очередь заданий на сервере.

Но если в памяти остается только один экземпляр, возможно ли потерять задания / URL, опубликованные клиентом.

1 Ответ

1 голос
/ 14 мая 2009

COM обычно запускает один серверный процесс для всех запросов и создает экземпляры всех объектов в этом процессе. Если у вас есть какие-либо данные, используемые всеми объектами (глобальные переменные или статические переменные-члены), вам следует либо позаботиться о синхронизации, либо сделать COM-компонент согласованным (STA).

Если у вас нет синхронизации, а компонент является многопоточным (MTA), все данные, совместно используемые экземплярами, могут быть повреждены, если они записываются более чем одним потоком за раз.

...