ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Threads [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
wolverinefarah
Colaborador
Colaborador


Registrado: Sábado, 17 de Junho de 2006
Mensagens: 1770

MensagemEnviada: Sex Fev 17, 2017 8:29 am    Assunto: Threads [RESOLVIDO] Responder com Citação

Bom dia.

Gostaria de saber o que posso estar fazendo errado. Tenho uma thread anonma executando, blz, funciona, porem, quando vou passar o resultado para os controles, stringgrid e edit. O mesmo n atualizar, fica todo falhado, ja usei o ProcessMessage, repaint, porem o erro persiste, alguem sabe o que pode ser?

valeu!
_________________
Fernando Farah
PROGRAMADOR PROGRESS
PROGRAMADOR DELPHI + FIREBIRD


Editado pela última vez por wolverinefarah em Ter Fev 21, 2017 9:48 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Fev 17, 2017 8:50 am    Assunto: Responder com Citação

Bom dia,

o método para atualizar a tela está na thread?

se sim, você precisa utilizar o método Synchronize

ex:


Código:
procedure TfrmPrincipal.ApagarLogAntigoComThread;
begin
  TThread.CreateAnonymousThread(
    procedure()
    var
      SearchRec : TSearchRec;
      i : integer;
      sDir : string;
    begin
      sDir := ExtractFileDir(ParamStr(0));
      i := FindFirst(sDir + '\*.log',0,SearchRec);
      while i = 0 do
      begin
        if StrToInt(Copy(SearchRec.Name,1,4)) < (strtoint(FormatDateTime('yyyy',Now)) - 1) then
          deleteFile(sDir + '\' +SearchRec.Name);
        i := FindNext(searchRec);
      end;
      //atualizar componente vcl
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          frmPrincipal.stbRodape.SimpleText := 'Arquivos de log antigos deletados com sucesso';
        end
      );
    end
  ).Start;
end;


retirei o exemplo desse link:
https://drgarcia1986.wordpress.com/2013/02/13/threads-no-delphi-por-onde-comecar-parte-iv/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wolverinefarah
Colaborador
Colaborador


Registrado: Sábado, 17 de Junho de 2006
Mensagens: 1770

MensagemEnviada: Dom Fev 19, 2017 2:23 pm    Assunto: Responder com Citação

leo_cj escreveu:
Bom dia,

o método para atualizar a tela está na thread?

se sim, você precisa utilizar o método Synchronize

ex:


Código:
procedure TfrmPrincipal.ApagarLogAntigoComThread;
begin
  TThread.CreateAnonymousThread(
    procedure()
    var
      SearchRec : TSearchRec;
      i : integer;
      sDir : string;
    begin
      sDir := ExtractFileDir(ParamStr(0));
      i := FindFirst(sDir + '\*.log',0,SearchRec);
      while i = 0 do
      begin
        if StrToInt(Copy(SearchRec.Name,1,4)) < (strtoint(FormatDateTime('yyyy',Now)) - 1) then
          deleteFile(sDir + '\' +SearchRec.Name);
        i := FindNext(searchRec);
      end;
      //atualizar componente vcl
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          frmPrincipal.stbRodape.SimpleText := 'Arquivos de log antigos deletados com sucesso';
        end
      );
    end
  ).Start;
end;


retirei o exemplo desse link:
https://drgarcia1986.wordpress.com/2013/02/13/threads-no-delphi-por-onde-comecar-parte-iv/



Valeu leo_cj, funcionou.. Tinha tentado isso mas estava fazendo de forma equivocada.

Valeu!
_________________
Fernando Farah
PROGRAMADOR PROGRESS
PROGRAMADOR DELPHI + FIREBIRD
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Fev 20, 2017 8:48 am    Assunto: Responder com Citação

Opa, por nada, que bom que funcionou
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB