como atrasar uma função que é chamada em um loop while sem atrasar o loop

Dark Dreamer

imagine que tenho algo assim

void color(int a)
{
  if (a > 10)
  {
    return;
  }
    square[a].red();
    sleep(1second);
    color(a+1);
}
while (programIsRunning())
{
  color(1);
  updateProgram();
}

mas com algo que realmente requer uma função recursiva. como posso chamar essa função recursiva para colorir os quadrados um por um. porque por si só é muito rápido e se o programa está sendo atualizado a cada quadro. eles ficam coloridos instantaneamente quando eu quero que eles sejam coloridos um por um (com um atraso).

Frank

sleep()fará com que o thread atual pare. Isso o torna um péssimo candidato para atrasos perceptíveis no thread principal.

Você "poderia" ter um encadeamento que apenas lida com esse processo, mas os encadeamentos são caros, e criar / gerenciar um apenas para colorir quadrados em uma sequência é totalmente exagero.

Em vez disso, você poderia fazer algo como: Sempre que o programa for atualizado, verifique se é o momento apropriado para colorir o próximo quadrado.

const std::chrono::duration<double> color_delay{0.1};

auto last_color_time = std::chrono::steady_clock::now();
bool coloring_squares = true;

while (programIsRunning())
{
  if (coloring_squares) {
    auto now = std::chrono::steady_clock::now();

    // This will "catch up" as needed.
    while (now - last_color_time >= color_delay) {
      last_color_time += color_delay;
      coloring_squares = color_next_square();
    }
  }

  updateProgram();
}

Como color_next_square()funciona é com você. Você poderia "pré-assar" uma lista de quadrados para colorir usando sua função recursiva e iterar por ela.

Além disso, obviamente, este exemplo usa apenas o código que você postou. Você vai querer organizar tudo isso como parte updateProgram(), possivelmente em algum tipo de class SquareAnim {};invólucro com estado.

NB: se o seu programa tem pouco jitter, ou seja, tem um tempo consistente entre as atualizações e o atraso é baixo, usar o seguinte pode levar a uma animação um pouco mais suave:

if (now - last_color_time >= color_delay) {
  last_color_time = now;
  // ...

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como atrasar um loop em uma função de gerador em JavaScript?

Como faço para atrasar um loop for em swift sem interromper o thread principal?

Como atrasar um loop For para percorrer uma matriz que substitui o texto

Como atrasar um loop For para percorrer uma matriz que substitui o texto

Como coloco um atraso em uma estrutura de caso sem atrasar meu loop?

Como posso atrasar uma chamada de função?

Como atrasar uma execução em c #

Como atrasar chamadas de API em um loop para evitar a limitação da AWS

Como atrasar um loop no Android sem usar thread.sleep?

tentando atrasar usando setTimeout () em um loop while

Como atrasar uma função que retorna um valor antes da resposta do banco de dados?

Como atrasar uma resposta sem congelar o tópico?

Python: Por que uma função chamada em um loop while retornaria algo diferente do que quando chamada sozinha?

Como fazer meu aplicativo atrasar e atualizar os componentes do layout em cada iteração de um loop

Como atrasar o carregamento de um aplicativo de reação até que uma ação seja acionada?

Como faço para atrasar uma execução em Javascript?

Atrasar a solicitação recursiva HTTP get dentro de um loop do while no Angular 6

atrasar a varredura por alguns minutos em R para o loop

Como atrasar um evento jquery que não é uma animação?

No Qt, como posso atrasar o retorno de uma função-membro até que um sinal seja recebido?

Precisa de uma função para atrasar sem limpar o buffer em linguagem C

Android / Java: como atrasar o retorno em um método

Como posso atrasar um observador de mutação em JavaScript?

como inserir um loop while em uma função

Como atrasar uma substituição de comando em um script de shell?

Como atrasar uma função até que uma instrução forEach seja concluída?

Como atrasar uma chamada de função contando o tempo de execução da própria função

Falha ao atrasar a função até depois que o loop 'for' for totalmente concluído

Como executar um loop while para executar uma chamada de API REST até que não haja mais resultados em Python

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo