Configuring Timeouts

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Um aplicativo sempre defina tempos limite de comunicação usando o COMMTIMEOUTS estrutura cada tempo que ele abre uma porta de comunicação.

Se essa estrutura não for configurada, a porta usa tempos limite usar como padrão fornecido pelo driver, ou tempos limite de um aplicativo de comunicação anteriores.

Por supondo que as configurações específicas tempo limite quando as configurações são realmente diferentes, um aplicativo pode ter operações de leitura/gravação que nunca completo ou completo com muita freqüência.

Quando Leitura/Gravação tempo limite operações, o completo operações com nenhum valores de erro retornados para o ReadFile e WriteFile funções.

Para determinar se uma operação tem tempo limite atingido Out, verificar que o número de bytes transferidos é menor do que o número de bytes solicitados.

De exemplo, se a ReadFile função retorna TRUE, mas menos bytes foram ler que solicitada, a operação foi tempo limite atingido fora.

Para configurar tempos limite de uma porta serial

  1. Inicializar o COMMTIMEOUTS estrutura por chamado de GetCommTimeouts função ou pela configuração de membros manualmente.

  2. Especificar o número máximo de milissegundos que podem decorrer entre dois caracteres sem um tempo limite ocorrendo com o ReadIntervalTimeout membro.

  3. Especificar a ler multiplicador tempo limite com o ReadTotalTimeoutMultiplier membro.

    Para cada operação de leitura, esse número é multiplicado pelo número de bytes que o operação de leitura espera para receber.

  4. Especificar a ler constante tempo limite com o ReadTotalTimeoutConstant membro.

    Esse membro é o número de milissegundos adicionados ao resultado da multiplicação o número total de bytes para ler por ReadTotalTimeoutMultiplier.

    O resultado é o número de milissegundos que devem transcorrer antes que ocorra um tempo limite para o operação de leitura.

  5. Especifica o multiplicador tempo limite de gravação com o WriteTotalTimeoutMultiplier membro.

    Para cada operação de gravação, esse número é multiplicado pelo número de bytes que o operação de gravação espera para receber.

  6. Especificar a constante tempo limite de gravação com o WriteTotalTimeoutConstant membro.

    Esse membro é o número de milissegundos adicionados ao resultado da multiplicação o número total de bytes a gravar por WriteTotalTimeoutMultiplier.

    O resultado é o número de milissegundos que devem transcorrer antes que ocorra um tempo limite para o operação de gravação.

  7. Chamar o SetCommTimeouts função para ativar as configurações tempo limite porta.

    Observação

    Porque existem duas tempos limite, tempo limite intervalo e (Total constante tempo limite + Total multiplicador tempo limite * número de bytes), um real é tempo limite o tempo limite ocorre primeiro.

Para ajudar com multitarefa, é comum para configurar COMMTIMEOUT Portanto, ReadFile retorna imediatamente com todos os caracteres a buffer de entrada. Para fazer isso, defina ReadIntervalTimeout Para ambos os MAXWORD e conjunto ReadTotalTimeoutMultiplier e ReadTotalTimeoutConstant para zero.

O seguinte mostra como configurar tempos limite de uma porta serial exemplo de código.

// Retrieve the timeout parameters for all read and write operations
// on the port. 
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts (hPort, &CommTimeouts);

// Change the COMMTIMEOUTS structure settings.
CommTimeouts.ReadIntervalTimeout = MAXDWORD;  
CommTimeouts.ReadTotalTimeoutMultiplier = 0;  
CommTimeouts.ReadTotalTimeoutConstant = 0;    
CommTimeouts.WriteTotalTimeoutMultiplier = 10;  
CommTimeouts.WriteTotalTimeoutConstant = 1000;    

// Set the timeout parameters for all read and write operations
// on the port. 
if (!SetCommTimeouts (hPort, &CommTimeouts))
{
  // Could not set the timeout parameters.
  MessageBox (hMainWnd, TEXT("Unable to set the timeout parameters"), 
              TEXT("Error"), MB_OK);
  dwError = GetLastError ();
  return FALSE;
}

See Also

Concepts

Programming Serial Connections