Bom dia, João e amigos da lista!

João, a dica que vc passou eu não consegui implementar, mas de qualquer 
maneira, o programa já tinha ficado em otimizado já na primeira tentativa.

Porém surgiu um probleminha:

O programa foi compilado usando Windows XP Pro com SP2 num P4 2.8GHz e 512 MB 
RAM e funcionou a contento.

A máquina onde vou executar é um notebook (pré histórico) ThinkPad IBM com 
Windows 95 (v4.00.950 B) com processador Intel Pentium MMX 233MHz com 64MB RAM.

Nessa máquina o programa apenas iniciava a contagem, não parava nunca.

Então peguei uma outra máquina de teste, nesse caso um desktop IBM-PC 300GL com 
Windows 98 (v.4.10.2222 A) num processador Intel Celeron 300MHz e 64 MB RAM.

Obtive o mesmo problema. A contagem era iniciada, porém quando deveria parar, 
não parava.

Peguei outra máquina para teste, nesse caso um "Generic PC" com processador AMD 
Athlon MP 1.0GHz e Windows 2000 SP 4 (v.5.00.2195) e tudo funcionou normalmente.

Agora vem a pergunta fatal: Devo alterar alguma coisa no programa para que ele 
rode nos benditos Win95/Win98? O que devo alterar?

Desde já grato,
Ricardo.


Ricardo César Cardoso <[EMAIL PROTECTED]> escreveu:                             
     Vou testar essa dica aí que vc passou. Qualquer coisa, te informo!
 
 Sds,
 Ricardo.
 
 Joao Morais <[EMAIL PROTECTED]> escreveu:                                  
Ricardo César Cardoso wrote:
  
  > Boa tarde João!
  > 
  > Olha, meu amigo, vc é fera mesmo! O abacaxi já tá totalmente
  > descascado! Só fiz a alteração de mais um detalhezinho pra
  > gente poder saborear o dito cujo...
  > 
  > O projeto funcionou perfeitamente! MUITISSIMO OBRIGADO,
  > vc não sabe o quanto me ajudou.
  
  Olá Ricardo.
  
  Disponha! Obrigado por seu retorno, bom saber que deu tudo certo.
  
  Depois você tira a poupa desse abacaxi, separa metade e manda aqui pra 
  gente fazer um suco :-))
  
  > Fiz as alterações como vc sugeriu e as units ficaram com abaixo:
  
  Ficou legal.
  
  Estive olhando a implementação do ttimer e verifiquei um truque para 
  você resetar o timer. Ao invés de destruí-lo e recriá-lo a cada 1ms, 
  tente apenas reassociar o evento ontimer. Se funcionar, de cara você 
  economiza 2000 alocações+liberações de memória por segundo.
  
  --
  João Morais
  
  > (************************ Unit do Cronômetro *************************)
  > type
  >   TfrmCrometro = class(TForm)
  > {...}
  >     procedure ComPortError(Sender: TObject; Errors: TComErrors);
  >     procedure FinalizaCronometro(Sender: TObject);
  >     procedure CriaTimer;
  > {...}
  >   public
  >     { Public declarations }
  >     Iniciado : Boolean;   // Flag do primeiro sinal da porta
  >     HoraIni : TDateTime; // Data e hora do recebimento do primeiro sinal
  >     MyTimer  : TTimer; // Objeto Timer criado dinamicamente
  >   end;
  > {...}
  > implementation
  > 
  > {$R *.dfm}
  > 
  > uses ThreadMonitora;
  > {...}
  > Procedure TfrmCrometro.ComPort1Error(Sender: TObject; Errors: TComErrors);
  > // Este evento se repete enquanto o botão do hardware está acionado
  > // ele fica mandando pulsos para o computador a cada 1ms
  > 
  >  Begin
  >    if not Iniciado then
  >    begin
  >      HoraIni := Now; // implementei a inicialização dentro de um TButtom
  >      Iniciado := True; // Esse seria o flag da recepção do primeiro evento.
  > 
  >      // Código de criação da Thread - Como Fazer?
  >      // Seria assim?
  >      with TThreadMonitora.Create(True) do
  >      begin
  >        Priority  := tpLowest; // baixei mais ainda a prioridade
  >        StartTime := HoraIni;
  >        Started   := @Iniciado;
  >        Resume;
  >      end;
  >    end
  >    else
  >    begin
  >      MyTimer.Free;
  >      CriaTimer;
  >    end;
  >  End;
  > 
  > Procedure TfrmCrometro.FinalizaCronometro(Sender: TObject);
  >  Begin
  >    if Iniciado then // aqui foi a jogada de mestre. para o contador "visual"
  >    begin
  >      Iniciado := False;
  >      Label1.Caption := FormatDateTime('hh:mm:ss:zzz', Now - HoraIni);
  >    end
  >  End;
  > 
  > Procedure TfrmCrometro.CriaTimer;
  >  Begin
  >    MyTimer := TTimer.Create(Self);
  >    with MyTimer do
  >    begin
  >      Interval := 125; 
  >      Name     := 'DynaTimer';
  >      OnTimer  := FinalizaCronometro;
  >    end;
  >  End;
  > {...}
  > 
(****************************************************************************)
  > 
  > (********************* Unit da Thread de contagem ********************)
  > unit ThreadMonitora;
  > 
  > interface
  > 
  > uses
  >   Classes, SysUtils, Windows;
  > 
  > type
  >   TThreadMonitora = class(TThread)
  >   private
  >     { Private declarations }
  >     FStartTime : TDateTime;
  >   protected
  >     procedure Execute; override;
  >     procedure AtualizaLabel;
  > 
  >   public
  >     Started: ^Boolean;
  >     property StartTime: TDateTime read FStartTime write FStartTime;
  >   end;
  > 
  > implementation
  > 
  > uses uCronometro;
  > 
  > 
  > { TThreadMonitora }
  > 
  > Procedure TThreadMonitora.AtualizaLabel;
  >  Begin
  >    frmCrometro.Label1.Caption := FormatDateTime('hh:mm:ss:zzz', Now - 
StartTime);
  >  End;
  > 
  > Procedure TThreadMonitora.Execute;
  >  Begin
  >   { Place thread code here }
  >   while Started^ do
  >     Synchronize(AtualizaLabel);
  >  End;
  > 
  > END.
  > 
(**********************************************************************************)
  > 
  
  
      
                        
 
 __________________________________________________
 Fale com seus amigos  de graça com o novo Yahoo! Messenger 
 http://br.messenger.yahoo.com/ 
 
 [As partes desta mensagem que não continham texto foram removidas]
 
 
     
                       

 __________________________________________________
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 

[As partes desta mensagem que não continham texto foram removidas]

Responder a