И для того, и для другого сразу. Вот как штатная (Hard + Soft) работает.
Я пытаюсь понять, может ли она полностью заменить штатную.
можно применять разный подход:
- автоматическое удаление при удалении оббъекта - будет работать в бэке
- ручное удаление, при интерактиве (т.е. выставлять queue.AutoClose=False, ЕМНИП она и так False) - вызываем закрытие сами (в нужный момент, например в PS формы). пример из Delete виндового
Код:
If misOwner And mAutoClose And hMQ<>0 Then Call apiMQClose(hMQ,0)
ток проверку, в этом случае делать иначе (по статусу возвращаемому агентом, при инициализации: isOwner).
Можно и вовсе - вешать агент (в бэке - без ожидания возврата) на Sleep (с автозакрытием) - получим блокировку с тайаутом

интерактив запишет ч-л в очередь, если не успеет - ему на QS облом выдать (попытается прочитать, будучи овнером - а там пусто или очереди нет)
т.е. вызываем агент с юнидом (пишем туда ч-л), не ждем завершения, на QO - читаем очередь (тонкий момент - надо подумать что писать/читать), если овнер - очередь существует, пишем свой юнид, на QS читаем очередь, если облом - продолбали таймаут