Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Threads: Introdução, Atributos, Exemplos.


Drakar~
 Compartilhar

Posts Recomendados

Assunto: Threads

Nível: Intermediário.

Autoria:Drakar~

 

Índice:

Apresentação

1.1 - Introdução

 

Conhecendo os Atributos

2.1 - Execute

2.2 - Create

2.3 - Resume

2.4 - Suspend

2.5 - Terminate

2.6 - FreeOnTerminate

2.7 - Priority

2.8 - Synchronize

 

Colocando Thread em Prática.

Considerações Finais.

 

-------------------------------------------------------------------------------------------------------------------

Apresentação

 

1 - Olá pessoal da área Visual Basic \ Delphi, Venho por meio desse Tutorial Básico sobre Threads, resolver as perguntas mais comuns de Programadores Iniciantes sobre o assunto. Sem mais Delongas, Let's Go!

 

1.1 - Introdução: Muitas vezes quando estamos programando em delphi, necessitamos fazer um loop ou Algum Procedimento "Pesado" que muitas vezes chega impossibilitar o finalizamento do mesmo ou então precisamos realizar várias tarefas ao mesmo tempo, oque pode deixar o programa "Pesado". Para estes entre outros Problemas, utilizamos as Threads.

 

- As threads são utilizadas para ordenar a ordem de processamento

De cada processo do Windows. uma aplicação sem definição de thread é criada como Idle, que é o nível mais baixo de Processamento.

 

-A classe TThread é uma classe abstrata, por isso nunca é utilizada diretamente e sim através de uma subclasse dela, que por sua vez utiliza recursos da classe base, neste caso a TThread.

 

-------------------------------------------------------------------------------------------------------------------

Conhecendo os Atributos

 

-Vamos Conhecer os Principais Atributos de uma Thread:

 

2.1 - Execute: Aqui você inseri os comandos que serão executados.

 

2.2 - Create(CreateSuspended:boolean): Determina se a Thread vai ser criada em um estado Ativo ou não.

usando TRUE a Thread será cria em modo suspenso (Pausado),

usando FALSE, após criada ela é automaticamente executada (não Recomendo).

 

2.3 - Resume: Reinica a Thread;

2.4 - Suspend: Pausa a Thread

2.5 - Terminate: Finaliza a Thread;

 

2.6 - FreeOnTerminate: Boolean (True ou False), determina se o Thread vai ser automaticamente destruida após ser finalizada.

 

2.7 - Priority: (tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical):

Determina qual vai ser a prioridade de execução de sua Thread. (Recomendo o tpLower)

 

2.8 - Synchronize: Synchronize faz com que a procedure indicada como argumento seja executada em um modo seguro que evite conflito entre as threads, evitando possíveis erros de acesso a objetos, etc. pq multi threading e GUI não combinam e, o Synchronize existe pra resolver isso.(By: Ryokusei)

-------------------------------------------------------------------------------------------------------------------

Criar e Colocar Thread em Prática.

 

1°. Abra o Delphi.

2°. Navegue até o menu File | New | Other;

3°. Selecione "Thread Object" conforme a figura abaixo:

 

imagem1gs.jpg

 

4°. Em Class Name: coloque "NomedaMinhaThread" sem

aspas, e pressione o botão OK.

 

16274454.jpg

 

- Pronto, isso vai criar uma nova Unit, que é a nosso Thread.

 

5°. "Deve" ter ficado assim:


Unit Unit2;

interface

uses
Classes;

type
TMinhaThread = class(TThread)
private

protected
procedure Execute; override;
end;
É necessário se cadastrar para acessar o conteúdo.

 

7°. Para ficar mais fácil manipular nossa thread, vamos definir um "Atalho" para a mesma. Declare a Variável Global:

 


var
Form1: TForm1;
[color="Red"]Atalho : MinhaThread;[/color]

Implementation
É necessário se cadastrar para acessar o conteúdo.

 

-------------------------------------------------------------------------------------------------------------------

Considerações Finais

É necessário se cadastrar para acessar o conteúdo.

Créditos: Drakar~

Link para o comentário
Compartilhar em outros sites

Ótimo tutorial... ta de parabens, continue escrevendo otimos topicos assim ;D

 

só acrescentando:

 

Muitos entendem a thread mas nao sabe bem como usá-la. Seu topico ensina mto bem como criar e manipular, entao vo dar uma ideia pra galera entender + ou - como seria a funcionalidade da thread.

 

Digamos que vc tem um progressbar que tem que se enxer ao maximo e mostrar uma msg ao usuario, diversas vezes (em diferentes açoes), vc pode por um timer para isso ( e iniciá-lo e pará-lo durante as açoes do usuario, ou de outra maneira, como mudando apenas o valor da progressbar, fazendo ela carregar novamente ), ou usar um for ou while (com sleep tbm talvez) em cada botao (ou seja la qual for a ação )....

 

Porém, pensando na ideia do tutorial, vc pode criar uma thread com a funçao de encher o progressbar e mostrar a msg, e soh executar ela quando precisar, dispensando a necessidade de varios codigos ou de um timer.

 

Não foi um exemplo 'mto util' mas ja da pra vcs entenderem + ou - o funcionamento da thread.

 

flw, abraçs

ótimo tutorial²

Link para o comentário
Compartilhar em outros sites

"2.8 - Synchronize: Usada para criar uma Procedure dentro da Thread e Chama-lá."

Não é isso.

Synchronize faz com que a procedure indicada como argumento seja executada em um modo seguro que evite conflito entre as threads, evitando possíveis erros de acesso a objetos, etc. pq multi threading e GUI não combinam e, o Synchronize existe pra resolver isso.

Qualquer coisa leia o artigo:

É necessário se cadastrar para acessar o conteúdo.

Link para o comentário
Compartilhar em outros sites

"2.8 - Synchronize: Usada para criar uma Procedure dentro da Thread e Chama-lá."

Não é isso.

Synchronize faz com que a procedure indicada como argumento seja executada em um modo seguro que evite conflito entre as threads, evitando possíveis erros de acesso a objetos, etc. pq multi threading e GUI não combinam e, o Synchronize existe pra resolver isso.

Qualquer coisa leia o artigo:

É necessário se cadastrar para acessar o conteúdo.

Realmente você está certo, vou modificar isso no Post, Obg por citar o erro.

Link para o comentário
Compartilhar em outros sites

Um dúvida, como irei chamar um argumento utilizando o Atributo "Synchronize" ??[/color][/b]

 

faça assim:

 

Abaixo da linha procedure Execute; override;

 

Coloque: Procedure MeuArgumento;

 

Ficando Assim:

É necessário se cadastrar para acessar o conteúdo.

 

Note que a procedure foi criada dentro de Private, ou seja o seu argumento só pode ser executado pela nossa

Thread, pois criamos ele em modo Protegido.

 

Agora adcione a procedure:

 

É necessário se cadastrar para acessar o conteúdo.

 

Se tudo tiver ocorrido bem, sua source deverá ter ficado assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

Pronto, quando sua thread for iniciada. ele chamará o argumento "MeuArgumento". Abrac's

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.