Clientseitige asynchrone Pipeverarbeitung

Vor dem Ausführen eines asynchronen Remoteaufrufs muss der Client zuerst das asynchrone Handle initialisieren. Wie bei Nichtpipe-Prozeduren ruft der Client eine asynchrone Funktion mit dem asynchronen Handle als ersten Parameter auf und verwendet das asynchrone Handle zum Senden und Empfangen von Pipedaten, Abfragen des Status des Aufrufs und Empfangen der Antwort.

Der Client macht den asynchronen Remoteprozeduraufruf mit dem asynchronen Handle als erstem Parameter. Der Client kann dieses Handle verwenden, um den Status des Aufrufs abzufragen und die Antwort zu empfangen. Das asynchrone Pipemodell ist symmetrisch. Sowohl Client- als auch Serveranwendungen senden und empfangen Pipedaten aktiv (im Gegensatz zu synchronem RPC, bei dem die Pipedaten passiv gesendet und empfangen werden).

Der Client sendet asynchrone Pipedaten, indem er die Pushfunktion für die entsprechende asynchrone Pipe aufruft. Dabei wird die Zustandsvariable der Pipe als erster Parameter verwendet. Wenn die Pushfunktion zurückgegeben wird, kann der Client den Sendepuffer ändern oder frei geben.

Wenn das RPC ASYNC NOTIFY ON SEND COMPLETE-Flag im asynchronen Handle festgelegt ist und APCs als Benachrichtigungsmechanismus verwendet werden, wird ein APC in die Warteschlange gestellt, wenn der Pipes sende-Vorgang tatsächlich _ _ abgeschlossen _ _ _ ist. Sie können diesen Mechanismus nutzen, um die Flusssteuerung zu implementieren. Beachten Sie jedoch Folgendes: Wenn der Client einen anderen Puffer pusht, bevor der vorherige Pushvorgang abgeschlossen ist, kann der Client abhängig von der Geschwindigkeit des Übertragungsvorgang nur eine Benachrichtigung zum Abschluss des Sendevorgang empfangen, nicht eine Benachrichtigung für jeden Puffer oder jeden Pushvorgang. Wenn der Client alle Pipedaten gesendet hat, wird ein letzter Pushaufruf ausgeführt, bei dem die Anzahl der Elemente auf 0 festgelegt ist.

Das Clientprogramm empfängt asynchrone Pipedaten durch Aufrufen der Pullfunktion für die entsprechende asynchrone Pipe, bei der die Zustandsvariable der Pipe als erster Parameter verwendet wird. Wenn keine Pipedaten verfügbar sind, gibt die Pullfunktion RPC _ S _ ASYNC _ CALL PENDING _ zurück.

Wenn der Benachrichtigungsmechanismus APC ist und der Server RPC S ASYNC CALL PENDING zurückgegeben hat, muss der Client warten, bis er den _ _ _ _ RpcReceiveComplete-APC aus der Laufzeit empfängt, bevor er erneut pull aufruft.