Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Predes

Loop

Recommended Posts

Bom dia, tenho um laço de repetições até atingir uma condição

peso := 0;
        repeat
        begin
        ACBrBAL1.LePeso( TimeOut );
        Peso:=StrToFloat(sttPeso.caption);
        end;
        until peso <> 0;
após o peso ser diferente de 0 eu executo uma série de instruções sql, imprimo etiqueta etc, após executar essas instruções eu gostaria de voltar para esse laço,e verificar novamente se peso é igual a 0, existe essa possibilidade? como faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando é igual a zero ele fica dentro desse laço "Infinito", monitorando a balança até que alguém coloque um peso sobre a balança, então peso será > 0 então irá executar todas as rotinas, depois disso teria que voltar pro laço e ficar monitorando a balança novamente neste laço que poste acima ou em um

while peso = 0 do
        begin
        
        
        ACBrBAL1.LePeso( TimeOut );
        Peso:=StrToFloat(sttPeso.caption);
        if peso > 0 then
        break;
ou algo do tipo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, existe um monte de possibilidades. Você pode utilizar um timer e não precisa mais deste laço (se este laço estiver fora de uma thread, provavelmente vai fazer o seu programa parar de responder).

 

você pode também utilizar uma máquina de estados ou então combinar os dois.

 

 

Veja um exemplo com maquina de estados

var
 estado : integer;
//estado 0 = aguardando
//estado 1 = rodando
procedure Form1.Timer1Timer(Sender: TObject);
begin
	if (estado = 0) then
	begin
		if (peso <> 0) then
		estado := 1
	end
	else if (estado = 1) then
	begin
		//executa comandos sql, imprime etiqueta, etc
		if (Peso = 0) then
			Estado := 0;
	end;
end;

 

o uso de maquina de estados, apenas timer ou thread depende muito de como você quer fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, tentarei utilizar o estado, e posto aqui.A questão é que essa rotina está vinculada a um botão. e gostaria que o usuário pressionasse o botão apenas uma vez pra iniciar o processo, daí em diante ficaria monitorando a balança e pesando os produtos conforme o usuário coloca e retira o produto da balança, sem ter que pressionar o botão novamente entre as pesagens, e só seria interrompido a rotina ao pressionar um botão ex: ESC. ]

Por isso achei necessário a utilização de um laço.

Vou testar qualquer coisa volto aqui

obrigado mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.