C Nanosleep função Uso

C Nanosleep função Uso
A função Nanosleep é um método do sistema UNIX. O objetivo da Nanosleep é suspender ou pausar a execução de um programa específico por um período definido. Este artigo ajudará você a entender e fornecer uma compreensão aprimorada de “Como utilizar a função nanosleep ().”Mais uma função é“ sono ”, mas usaremos o Nanosleep () porque podemos fornecer nanossegundos para pausar/tempo de sono.

Sintaxe:

A figura acima indica a sintaxe da função nanosleep e é definida no arquivo de cabeçalho.

RQTP: O RQTP é um ponteiro do Timespec, que indica o intervalo de tempo para o qual o usuário deseja suspender ou pausar o thread/programa.

Rmtp: O RMTP é um ponteiro do Timespec que indica que a função armazenou o período que permanece no intervalo.

O tempo da estrutura é utilizado para identificar intervalos de tempo no nível de nanossegundos.

Objetivo de usar nanosleep () em c

Nanosleep é uma interface portátil do sistema operacional. É uma chamada compatível com o sistema para suspender um fio específico da execução de um programa por uma quantidade específica de tempo. Funções semelhantes também estão disponíveis para o mesmo objetivo. O sono é um daqueles processos que leva segundos para suspender o programa, mas diz-se que fornece suspensão de baixa resolução. Portanto, a função Nanosleep concede permissão ao usuário para fornecer o tempo de sono em nanossegundos para melhor precisão.

Anteriormente, o método nanosleep () era usado para lidar com pausas de até 2 ms quando chamadas dos threads programados, mas exigiria mais precisão para lidar com hardware ou aplicativos críticos do tempo.

Valor de retorno

  1. Se o programa tiver sido executado com sucesso, ele retornará 0.
  2. Se o programa foi executado sem sucesso ou falhou e foi interrompido, ele retornará -1.

Erros

  1. Efault: O tipo de erro efault ocorre se houver algum problema na cópia de informações do Usuário Space.
  2. Eintr: Einthr tipo de erro ocorre quando há uma interrupção na pausa por um sinal que foi entregue ao fio.
  3. Einval: Se o valor dos nanossegundos no times da estrutura não estiver na faixa de 0 a 999999999 ou tiver um valor negativo, ele lançará esse erro.

Se a extensão determinada no RQTP é outra coisa senão uma diferença precisa do relógio oculto da granularidade, ele será coletado. Além disso, pode haver um adiamento mais tarde se o restante do trabalho terminar antes que a CPU puder executar a string de chamada mais uma vez.

Como o método Nanosleep não funciona para um período relativo, tende a ser arriscado se o método for chamado repetidamente depois de enfrentar obstáculos ou interrupções por sinais, porque o tempo entre interrupções do sinal e a chamada de reinicialização causará uma ligeira mudança quando o sono acabamentos. Use o relógio Nanosleep (2) com um valor temporal total para ficar longe deste problema.

Nanosleep () deve quantificar o tempo com o relógio em tempo real do oponente, conforme Posix.1. Linux, mais uma vez, utiliza o relógio do relógio para monitorar o tempo. Isso é presumivelmente imaterial porque o posix.1 Relógio Settime (2) expressa particularmente que as mudanças espasmódicas no relógio em tempo real não devem influenciar o Nanosleep ().

Se definirmos o valor do relógio em tempo real via setTime (2). Isso não terá nenhum efeito nos programas bloqueados e esperando na fila por um tempo relativo com base neste relógio.

Exemplo em c

Primeiro de tudo, tivemos que inicializar a biblioteca que tem a estrutura de um ponteiro de tempo de solicitação do tempo e um ponteiro de tempo restante do tempo. Existem dois ponteiros que armazenam a quantidade de tempo que o usuário deseja suspender o programa e também o tempo restante para que o tempo de intervalo de parada saiu.

Depois disso, começamos nosso corpo principal e temos que criar dois objetos do Timespec que conterão nossa solicitação e o tempo restante. Poderíamos atribuir qualquer valor a esses dois objetos, mas no nosso caso, escolhemos 3 segundos e 500 nanossegundos.

Agora, passaremos os endereços dos objetos criados para o Nanosleep, como você pode observar na linha número 10. Também verificaremos se o programa foi bem -sucedido ou falhou observando o valor de retorno do método nanosleep.

O programa acima imprimirá a seguinte saída se for executado com sucesso:

Se alterarmos o valor da resposta para 1 a execução do programa falhará e produzirá o seguinte erro como saída.

Agora, se queremos executar o seguinte código em nosso terminal GCC. Primeiro, salvaremos nosso arquivo como principal.c e depois use o seguinte comando no seu terminal para executar o programa: “GCC-WALL PRINCIPAL.c-o ”. Uma parede significa ativar todas as mensagens de aviso ao executar nosso programa.

INSETOS

A execução atual do nanosleep () depende do componente típico do relógio de bits, que tem um objetivo de 1/Hz s. Nesse sentido, o nanosleep () pára de forma consistente pelo tempo predefinido, mas pode levar até 10 ms a mais do que o indicado até que a interação se torne correr mais uma vez. Para uma explicação semelhante, o valor retornado no caso de um sinal transmitido em *rmtp e é normalmente ajustado à seguinte diferença maior de 1/hz s.

Justificativa:

É normal suspender a execução de uma string por algum tempo para pesquisar a situação com o objetivo de um trabalho não introduzido. Inúmeras necessidades reais podem ser atendidas com uma extensão direta para dormir () que dá uma meta melhor.

No posix.1-1990 NORM e SVR4, é viável executar uma prática cotidiana, exceto que a recorrência do despertar é restrita pelo objetivo do alarme () e do sono () funções. É provável que escreva esse padrão em 4.3 BSD, enquanto utiliza nenhum estoque estático e poupando nenhum escritório de estrutura. Embora seja viável compor uma função com utilidade comparável ao sono () utilizando o restante do timer_* () capacidades, essa capacidade requer a utilização de sinais e a reserva de algum número significativo. Este volume de IEEE std 1003.1-2001 precisa de que o nanosleep () seja não-medledsome se os sinais funcionarem.

O trabalho nanosleep () retornará um valor de 0 no progresso e - 1 na falha, ou novamente sempre que interferiu em. Este último caso de opção não é o mesmo que o sono (). Isso foi feito à luz do fato de que o tempo restante é devolvido, utilizando um ponteiro da estrutura de contenção, RMTP, e não como uma maneira de trazer a aprovação de volta.

Conclusão

O foco desta pesquisa foi ajudá -lo a desenvolver uma melhor compreensão do método Nanosleep (). Para ter um bom controle de métodos como o Nanosleep, é necessário ilustrá -los com o exemplo mais simples. Ficamos o nosso melhor para fornecer as melhores informações, como bugs, lógica, exemplos, erros e sinopse. Para que você possa continuar melhorando a interpretabilidade e a reutilização do seu código. Nós analisamos uma explicação simples de sintaxe. O artigo o ajudará a obter rapidamente uma interpretação completa de como usar o nanosleep () como um método. Para fazer um uso muito melhor do método, considerações como variáveis ​​foram abordadas e bem explicadas para os usuários.