Aprovado: Fortect
Na semana passada, algumas pessoas em relação aos nossos leitores encontraram o erro de contador geral do Win32. Vários fatores podem causar essa disfunção. Falaremos sobre isso abaixo.
- 2 instantes para ler.
Obtém o preço atual do contador de desempenho, que representa o tempo de resposta de longos períodos (<1 μs) em que esse escudo pode ser usado para medições de tempo.
Sintaxe
Aprovado: Fortect
Fortect é a ferramenta de reparo de PC mais popular e eficaz do mundo. Milhões de pessoas confiam nele para manter seus sistemas funcionando de forma rápida, suave e livre de erros. Com sua interface de usuário simples e mecanismo de verificação poderoso, o Fortect localiza e corrige rapidamente uma ampla gama de problemas do Windows, desde instabilidade do sistema e problemas de segurança até gerenciamento de memória e gargalos de desempenho.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Parâmetros
Um ponteiro para uma variável obtém esse preço de mercado atual de um contador de desempenho numérico.
Valor retornado
Se a maioria das funções não funcionar, o valor de retorno é 0%. Para obter mais informações sobre como gerar um erro, GetLastError . Em sistemas que executam o Windows XP ou outro, a função sempre terá êxito e, portanto, provavelmente nunca deverá retornar zero.
Para obter mais instruções sobre este excelente recurso e como ajudá-lo, consulte Gravando carimbos de data / hora em alta definição .
Exemplos
// Obtenha o número atual mais importante de ticks de QueryPerformanceCounter.Throws. longe// Diferença se a chamada para QueryPerformanceCounter falhar.static th interno int64_t GetTicks () LARGE_INTEGER funciona; if (! QueryPerformanceCounter (& Ticks)) winrt :: throw_last_error (); Carrapatos return.QuadPart;
Requisitos
Veja também
Não é a resposta específica que você está procurando? Navegue pelas perguntas restantes sinalizadas pelos temporizadores do Windows C ++ e faça sua própria pergunta.
#include PCFreq duplo = 0,0;__int64 CounterStart = 0;void StartCounter () LARGE_INTEGER li; if (! QueryPerformanceFrequency (& li)) custo << falhou! notT "; "Frequência de execução da consulta PCFreq = 4'6ft double (li.QuadPart) / 1000,0; QueryPerformanceCounter (& li); CounterStart é igual ao que pode li.QuadPart;GetCounter duplo () Lee; large_integer QueryPerformanceCounter (& li); visita dupla (li.QuadPart-CounterStart) / PCFreq;int main () StartCounter (); Sono (1000); custo << << " n"; getcounter () volta para 0;
Este programa deve retornar um número completo próximo a 1000 (a hibernação do Windows certamente não terminou ainda, mas deve ser 999).
O trabalho StartCounter ()
registra o volume de ticks que este serviço possui no aspecto do tipo CounterStart
. O intent GetCounter ()
retorna o número associado em milissegundos a partir do momento em que a última chamada para startcounter ()
seja um double, ou seja, se GetCounter () < / code> tem precedência em 0,001, então o segundo para
StartCounter ()
é de aproximadamente um microssegundo.
foi chamado
Se você deseja que o cronômetro use segundos em geral, altere-o
PCFreq = double (left QuadPart) /1000.0;
PCFreq = double (QuadPart esquerdo);
PCFreq significa double (li.QuadPart) /1000000.0;
587 11 ícones para sua descoberta antiga
respondeu em 15 de novembro passado natal às 23h25.
2.248 33 emblemas dourados
/ ** Usar relógio na inicialização * /#define TIMER_INIT n LARGE_INTEGER freqüência; n LARGE_INTEGER t1, t2; n passou duas vezes; n QueryPerformanceFrequency (& frequência);/ ** Use para iniciar um cronômetro de desempenho * /#define TIMER_START QueryPerformanceCounter (& t1);/ ** Use este parâmetro para interromper um minuto de desempenho e exibir a liderança em um determinado fluxo. Menos prolixo do que meramente c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Contador de desempenho de consulta (& t2); n elapsedTime = (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n std :: wcout << elapsedTime << L "sec" << endl;
TIMER_INIT TIMER_START Sono (1000); TIMER_STOP TIMER_START Sono (1234); TIMER_STOP
1 0,00003 seg.1,23407 s.
933
respondeu em 10 de abril de 2013 às 13h04
Supondo que você esteja no Windows (então, se precisar marcar sua pergunta, assim será!), você pode encontrar uma classe simples e boa em costurar C ++ HRTimer
classe a partir deste código-fonte específico em esta página do MSDN. qual cross-bow suporta as chamadas definidas necessárias para fazer algo realmente próximo às suas necessidades (seria simples adicionar a oportunidade GetTicks ()
ao problema, especialmente para fazer exatamente o que você realmente precisa Faz).
Em plataformas não Windows, não há função QueryPerformanceCounter, portanto, uma solução não é diretamente prática. No entanto, se o seu negócio reencapsulá-lo em uma classe como It hrtimer
mencionado acima, será muito mais conveniente alterar a implementação da classe para que você tire proveito das plataformas atuais, quase nenhuma dúvida, capaz (talvez através de um boost ou outra coisa!).
respondeu dezessete de novembro 09 às 23:28
775k 159159 emblemas para o seu antigo agradecimento
Eu adicionaria um driver NDIS de exemplo para economizar experiência nessa questão. Como é particularmente bem reconhecido, KeQuerySystemTime (simulado em NdisGetCurrentSystemTime) tem uma resolução melhor abaixo de milissegundos e, eventualmente, algumas redes de tecnologia, como pacotes ou IRPs futuros, podem exigir um carimbo de data / hora mais satisfatório;
dados LONG_INTEGER, frequência;LANGLON Diff;dados = KeQueryPerformanceCounter ((LARGE_INTEGER *) e frequência)diff, o que significa que data.QuadPart / (Frequency.QuadPart / $ divisor)
respondeu 21 de janeiro 12 às 14:12
2.686
Acelere o desempenho do seu computador agora com este simples download.