6 Stimmen

OLE-Anfrage-Timeout von C++ aus festlegen

Ich instanziere einen lokalen COM-Server mit CoCreateInstance. Manchmal braucht die Anwendung, die den Server bereitstellt, sehr lange, um zu starten. Wenn dies geschieht, zeigt Windows ein Dialogfeld wie dieses an:

Server ist beschäftigt

Die Aktion kann nicht abgeschlossen werden, weil das andere Programm beschäftigt ist. Wählen Sie "Wechseln zu", um das belegte Programm zu aktivieren und das Problem zu beheben.

[Wechseln zu...] [Erneut versuchen] [Abbrechen]

Ich habe eine Visual Basic-Eigenschaft für das Application-Objekt, OleRequestPendingTimeout, gefunden, mit der die Zeit bis zum Erscheinen dieses Dialogfelds gesteuert werden kann. Ich kann keine gute Dokumentation dazu finden oder ein Äquivalent, das in C++ nützlich ist. Kann mir jemand die richtige Richtung weisen?

9voto

John Dibling Punkte 96619

Wenn Sie MFC verwenden, haben wir so etwas immer gemacht:

// prevent the damned "Server Busy" dialog.
AfxOleGetMessageFilter()->EnableBusyDialog(0);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(0);

4voto

Sunlight Punkte 2093

Werfen Sie einen Blick auf IMessageFilter y CoRegisterMessageFilter .

3voto

Vasiliy Zverev Punkte 31

Um die Zeitüberschreitung zu erhöhen, rufen Sie an:

AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout);

Siehe Details hier So verhindern Sie, dass das Dialogfeld "OLE-Server ist beschäftigt" während einer längeren COM-Operation angezeigt wird

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X