Compensação de Atraso

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Compensação de Atraso

Re: Compensação de Atraso

Post by Gio » 19 Nov 2018, 11:19

Bom dia Juanmuscaria.

Não existe um parâmetro assim em praticamente nenhuma linguagem de alto nível. Isso ocorre porque os comandos das linguagens de alto nível não são 1:1 com as instruções do processador, de modo que uma única linha pode executar milhares de instruções ou apenas algumas poucas. Além disso, muitos comandos efetuam chamadas às APIs, que por sua vez também executam números variáveis de instruções.

:arrow: Por este motivo, é que a gestão do tempo de execução é um papel do próprio sistema operacional, ou seja, é ele quem determina quanto dos recursos disponíveis será direcionado para cada processo, aumentando ou diminuindo a velocidade de execução de cada programa conforme hajam recursos disponíveis para isso.

Tendo dito isto, se você quiser simplesmente executar as linhas em um intervalo regular, ainda pode fazer isso, embora tenha que na verdade reduzir a velocidade das linhas mais rápidas de modo a chegar à velocidade das mais lentas, o que não costuma ser o ideal.

Se quiser fazer mesmo assim, sugiro utilizar a variável embutida A_TickCount. Ela contém basicamente o número de milisegundos desde a última vez que o computador foi reiniciado. Assim, a diferença entre o valor dessa variável antes e depois de uma linha ou rotina é uma métrica boa para o tempo de execução dessa linha ou rotina. Também deve ser possível utilizar um while-loop para checar se a diferença no A_TickCount já chegou a um valor qualquer e prosseguir somente então.

:arrow: Exemplo: o código abaixo executa a segunda msgbox dez segundos após abrir a primeira (ou assim que a primeira for fechada caso ela fique aberta por mais de 10 segundos).

Code: Select all

Start := A_TickCount
msgbox % "first!"
While ((A_TickCount - Start) < 10000)
{
	Continue
}
msgbox % "Second!"
Veja que o comportamento do código acima é totalmente diferente de um código que use Sleep, 10000. Isso ocorre porque o comando Sleep vai sempre esperar 10 segundos DEPOIS de você fechar a primeira msgbox.

Code: Select all

Start := A_TickCount
msgbox % "first!"
Sleep, 10000
msgbox % "Second!"

Compensação de Atraso

Post by juanmuscaria » 17 Nov 2018, 19:06

Teria algo capaz de detectar quanto tempo o script leva para execução de cada linha e fazer um auto ajuste com o SetBatchLines para manter uma execução fixa sem flutuação de delay?
Obs:
Deixar o SetBatchLines -1 não é uma opção pois eu uso linux e o script executa absurdamente rápido quase ignorando os delays.

Top