Fórum Preciso de um exemplo de Thread #176140
20/08/2003
0
Desde já Obrigado.
Urgente
Edusgouveia
Curtir tópico
+ 0Posts
20/08/2003
Maxwell_monteiro
TMyThread = class(TThread)
procedure Execute; override;
end;
var
MyThread: MyThread;
TMyThread.Execute;
begin
// codigo a ser executado em uma linha de execução a parte (thread)
end;
é mais ou menos assim! pois não uso muito! mas o codigo que for colocado dentro do metodo execute será executado em uma linha de execução a parte ou seja uma thread!
Gostei + 0
20/08/2003
Max_ribeiro
http://www.canaldelphi.cjb.net
Tem um artigo sobre Threads muito bom.
[]´s
_____________
Max_Ribeiro 8)
Canais #delphi interbase firebird IRC Brasnet
Gostei + 0
19/01/2004
Mturon
Gostei + 0
19/01/2004
Beppe
Porque pensa que um thread seria melhor que um timer? Não que não possa ser usado assim, mas um thread seria para outras ocasiões.
Gostei + 0
28/01/2004
Mturon
Gostei + 0
26/08/2004
Alesabino
Coloque aqui a sua solução para todos poderem aprender!!!!
Gostei + 0
26/08/2004
Lucas Silva
http://delphiforum.icft.com.br/forum/viewtopic.php?t=33539
[color=red:988e89aa71][b:988e89aa71]Atenção!![/b:988e89aa71][/color:988e89aa71] [b:988e89aa71]Editando o tópico.[/b:988e89aa71]
O link informado está quebrado devido a mudança no host do fórum. O tópico é este: [url=http://forum.clubedelphi.net/viewtopic.php?t=33539]http://forum.clubedelphi.net/viewtopic.php?t=33539[/url].
Sandra/Moderação
Gostei + 0
26/08/2004
Alesabino
http://delphiforum.icft.com.br/forum/viewtopic.php?t=33539
[color=red:7344a56997][b:7344a56997]Atenção!![/b:7344a56997][/color:7344a56997] [b:7344a56997]Editando o tópico.[/b:7344a56997]
O link informado está quebrado devido a mudança no host do fórum. O tópico é este: [url=http://forum.clubedelphi.net/viewtopic.php?t=33539]http://forum.clubedelphi.net/viewtopic.php?t=33539[/url].
Sandra/Moderação[/quote:7344a56997]
Olá Lucas
Já li todo o tópico e não achei que tenha acrescentado muito.
Achei esse aqui mais promissor e resolvi respondê-lo.
Obrigado pela lembrança.
Alessandro.
Gostei + 0
30/08/2004
Mturon
Eu criei um novo datamodule, com um componente TDataBase e um TSession. Apontei a propriedade SessionName do DataBase para a Session criada. Coloquei então meu componente query e um datasource.
No create do datamodule utilizei estes comandos:
DataBase.Connected := False;
DataBase.Params := DataModuledoSistema.DataBasedoSistema.Params;
DataBase.Connected := True;
Deste modo criei uma nova conexão com o banco utilizando os mesmos dados da conexão atual.
Assim ficou minha declaração da Thread:
TThread = Class(TThread)
Private
I : Integer;
Painel: TPanel;
procedure AbreQry;
Protected
Procedure Execute; OverRide;
Public
Constructor CreateT(pnlDisp: TPanel);
Procedure Suspender;
Procedure Continuar;
End;
O método construtor ficou assim:
Constructor TThread.CreateT(pnlDisp: TPanel);
Begin
{ Executa Heranca Criando a Thread Suspença }
Inherited Create(True);
Priority := tpNormal;
FreeOnTerminate := True;
Painel := pnlDisp; // Painel do Form que chama a thread que recebe o
// Resultado da thread
{ Inicia a thread }
Suspended := False;
End;
O método execute:
Procedure TThread.Execute;
Begin
Synchronize(AbreQry);
Application.ProcessMessages;
if not OnLine then
Self.Suspend;
while not Terminated do
begin
Inc(I);
if I >= 90000000 then
begin
I := 1;
Synchronize(AbreQry);
end;
Application.ProcessMessages;
if (not OnLine) and (not Self.Suspended) then
Self.Suspend;
end;
End;
A rotina AbreQuery deve preencher os parametros, abrir e ao final, preencher o painel com o resultado pretendido:
procedure TThread.AbreQry;
begin
with FormqueChama, DataModuledaThread do
begin
Query.ParamByName(´X´).asInteger := 1;
Query.Open;
Painel.Caption := FormatFloat(´#,,,,0.00 ´,
Query.Campo.AsFloat);
end;
end;
No Form, criar uma variavel global deste modo:
var MyThread: TThread;
No evento FormShow:
MyThread := TThread.CreateT(PnlDisp);
Espero ter ajudado.
Marco Turon
Gostei + 0
18/08/2005
Marcosrocha
Já postei no outro tópico mas aqui também diz sobre o assunto!!
Tipo como eu crio uma thread?
Queria um exemplo assim!!
Crio a thread e fecho minha aplicação. A thread vê q a aplicação foi fechada e abre ela novamente e se ´auto destroi´... 8)
Gostei + 0
18/08/2005
Asensio
Eduardo,
Pq usar a Thread em vez do TTimer se o TTimer é uma Thread também. O TTimer move um novo ponteiro no sistema mesmo o fluxo dele esteja em outra parte. Por isso muita gente acaba se atrapalhando em usa-lo.
A performace depende de como usa-lo. Se não souber desligar ele no momento correto, vc estará executando diversos ponteiros no seu sistema e se ainda estiver usando consulta em banco de dados com certeza irá ter uma grande perda de performace. Mas no exemplo que vc deu dá para se trabalhar perfeitamente com ele.
Fui
Gostei + 0
19/08/2005
Beppe
Isto é incorreto. Um timer nem de longe se parece com um thread. O sistema indica que o temporizador esgotou enviando uma mensagem.
O timer só envia uma nova mensagem assim que a mensagem anterior for recebida, deste modo, mensagens pode não ser enviadas caso a responsividade seja lenta.
Gostei + 0
19/08/2005
Lucaniasalvatore
Segue abaixo um exemplo básico de tarefa.
----------Código------------------
unit UThread1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type T1 = class(TThread)
private
I:integer;
procedure Mostra;
protected
procedure Execute; override;
end; { of class declaration }
type T2 = class(TThread)
private
I:integer;
procedure Execute; override;
procedure Mostra;
end; { of class declaration }
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure T1.Mostra;
begin
Form1.Label1.Caption:=IntToStr(I);
end;
procedure T1.Execute;
var LI:integer;
begin
for LI:=1 to 3000 do
begin
I:=LI;
Synchronize(Mostra);
end;
end; { of procedure }
procedure T2.Mostra;
begin
Form1.Label2.Caption:=IntToStr(I);
end;
procedure T2.Execute;
var LI:integer;
begin
for LI:=1 to 6000 do
begin
I:=LI;
Synchronize(Mostra);
end;
end; { of procedure }
procedure TForm1.Button1Click(Sender: TObject);
begin
T1.Create(false);
T2.Create(false);
end; { of procedure }
end.
---------------------fim do código-----------
Creio que uma vez mapeada a forma de criar a tarefa, vc conseguirá adaptar suas funções e procedimentos.
Boa programação,
Lucania Salvatore
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)