Установить время ожидания OLE-запроса из C ++ - PullRequest
6 голосов
/ 11 ноября 2008

Я создаю экземпляр локального COM-сервера, используя CoCreateInstance. Иногда для запуска приложения, предоставляющего сервер, требуется много времени. Когда это происходит, Windows выдает следующее диалоговое окно:

Сервер занят

Действие не может быть завершено, потому что другая программа занята. Выберите «Переключить на», чтобы активировать занятую программу и устранить проблему.

[Переключиться на ...] [Повторить] [Отмена]

Я обнаружил упоминание о свойстве Visual Basic в объекте приложения OleRequestPendingTimeout, которое можно использовать для управления временем до появления этого диалогового окна. Я не могу найти хорошую документацию по этому или эквивалентный, который полезен из C ++. Кто-нибудь может указать мне правильное направление?

Ответы [ 3 ]

8 голосов
/ 12 ноября 2008

Если вы используете MFC, мы делали что-то вроде этого:

// prevent the damned "Server Busy" dialog.
AfxOleGetMessageFilter()->EnableBusyDialog(0);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(0); 
4 голосов
/ 12 ноября 2008

Посмотрите на IMessageFilter и CoRegisterMessageFilter.

3 голосов
/ 24 ноября 2009

Чтобы увеличить время ожидания звонка:

AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout);

Подробнее см. Здесь Как предотвратить появление диалогового окна OLE Server Busy во время длительной операции COM

...