Поделиться через


Правила для нескольких каналов

Можно объединить [в], [вне], а также [в, вне] параметры канала в любом сочетании в одном вызове, но необходимо обработать каналы в определенном порядке, как показано в следующем примере псевдокода:

Заметка

Эта функция больше не поддерживается на платформах Windows Vista и более поздних версий.

 

  • Получите данные из каждого входного канала, начиная с первого (левого) [в] параметр, и продолжайте в порядке, очищая каждый канал перед началом обработки следующего.
  • После полной обработки каждого входного канала отправьте данные для выходных каналов, снова начиная с первого параметра [вне] и продолжая по порядку, заполняя каждый канал перед началом обработки следующего.
//in .IDL file:
void InOutUCharPipe( [in,out] UCHAR_PIPE *uchar_pipe_1, 
                     [out] UCHAR_PIPE * uchar_pipe_2, 
                     [in] UCHAR_PIPE uchar_pipe_3);
 
//remote procedure:
void InOutUCharPipe( UCHAR_PIPE *param1,
                     UCHAR_PIPE *param2,
                     UCHAR_PIPE  param3)
{
    while(!END_OF_PIPE1)
    {
        param1->pull (. . .);
        . . .
    };

    while(!END_OF_PIPE3)
    {
        param3.pull (. . .);
        . . .
    };

    while(!END_OF_PIPE1)
    {
        param1->push (. . .);
        . . .
    };

    while(!END_OF_PIPE2)
    {
        param2->push(. . .);
        . . .
    };
} //end InOutUCharPipe