Dela via


Anropa synkronisering

COM-program måste kunna hantera användarindata korrekt vid bearbetning av ett eller flera anrop från COM eller operativsystemet. COM tillhandahåller samtalssynkronisering endast för entrådade lägenheter. Flertrådade lägenheter (som innehåller fritrådade trådar) tar inte emot samtal när de gör anrop (i samma tråd). Flertrådade lägenheter kan inte göra indatasynkroniseringsanrop. Asynkrona anrop konverteras till synkrona anrop i flertrådade lägenheter. Meddelandefiltret anropas inte för någon tråd i en flertrådad lägenhet. Mer information om trådningsproblem finns i Processer, Trådar och Lägenheter.

COM-anrop mellan processer delas in i tre kategorier, enligt följande:

synkrona anrop

Det mesta av kommunikationen som sker inom COM är synkron. När du gör synkrona anrop väntar anroparen på svaret innan han eller hon fortsätter och kan ta emot inkommande meddelanden i väntan. COM anger en modal-loop för att vänta på svaret, ta emot och skicka andra meddelanden på ett kontrollerat sätt.

asynkrona meddelanden

När du skickar asynkrona meddelanden väntar inte anroparen på svaret. COM använder PostMessage-- eller högnivåhändelser för att skicka asynkrona meddelanden, beroende på plattform. COM definierar fem asynkrona metoder för IAdviseSink:

Not

Även om COM bearbetar ett asynkront anrop går det inte att göra synkrona anrop. Till exempel kan ett containerprograms implementering av OnDataChange inte innehålla ett anrop till IPersistStorage::Spara. Dessa anrop är de enda asynkrona anrop som stöds av COM. Det finns inget sätt att skapa ett anpassat gränssnitt som är asynkront just nu.

 

indatasynkronerade anrop

När du gör indatasynkroniseringsanrop måste objektet som anropas slutföra anropet innan kontrollen returneras. Detta säkerställer att fokushantering fungerar korrekt och att data som anges av användaren bearbetas på rätt sätt. Dessa anrop görs av COM via funktionen SendMessage, utan att ange en modal-loop. När ett indatasynkroniserat anrop bearbetas får objektet som anropas inte anropa någon funktion eller metod (inklusive synkrona metoder) som kan ge kontroll. Följande metoder synkroniseras med indata

För att minimera problem som kan uppstå vid asynkron meddelandebearbetning är de flesta COM-metodanrop synkrona. Med synkron kommunikation behövs ingen särskild kod för att skicka och hantera inkommande meddelanden. När ett program anropar en synkron metod anger COM en modal vänteloop som hanterar de svar som krävs och skickar inkommande meddelanden till program som kan bearbeta dem.

COM hanterar metodanrop genom att tilldela en identifierare som kallas logiskt tråd-ID. En ny tilldelas när en användare väljer ett menykommando eller när programmet initierar en ny COM-åtgärd. Efterföljande anrop som är relaterade till det första COM-anropet tilldelas samma logiska tråd-ID som det första anropet.