Gde Ricardo,
 
Eu nao tinha visto os comentarios... heheh... sorry. Mas voltando a analisar
o código, tenta entrar no metodo syncronize e vai entrado codigo adentro ate
achar onde ele para para que possamos ter uma pista sobre o problema. Outro
problema q estou vendo eh q vc vai usar uma nova conexao na thread, certo?
Vc vai ligar TSQLQuery nele? Cuidado com isso pq o provider vai usa-lo pros
devidos inserts e updates.
 
 
[]´s
 
    
Sérgio T. Uetanabaro

 


   _____  

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de malikoski
Enviada em: quarta-feira, 19 de dezembro de 2007 09:31
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: RES: [delphi-br] Thread - Problemas!



Oi Sérgio,,

Eu tinha colocado o waitfor apenas para teste mas deixei ele
comentado. Quando executo o waitfor o sistema espera terminar a thread
e assim passa pelo syncronize e onterminate (que eu defini. pelo menos
foi isso que notei nos meus testes). O fied da prioridade eu também
usei, mas não estou usando mais e esqueci de apagar. Pra carregar os
dados eu apenas liguei um DBGrid ao datasource ligado ao dataset que
está sendo aberto na thread. 
Fiz outros testes sem acesso a dados, como um laço por exemplo na
thread, apenas para testar a funcionalidade, e não funciona de jeito
nenhum. Será que preciso definir algo na DLL?

Obrigado

Ricardo

--- Em HYPERLINK
"mailto:delphi-br%40yahoogrupos.com.br"[EMAIL PROTECTED], Sérgio
T. Uetanabaro <[EMAIL PROTECTED]>
escreveu
>
> Ola Ricardo!
> 
> Revendo seu código acredito que vc esteja em um deadlock. Vc chama a
> thread e depois entra num waitfor. Depois na thread vc tentar dar um
sync
> com a maisthread que está travada esperando a sua thread terminar.
Acredito
> que ai esteja seu problema. Outra coisa, vc definiu um field public
Priority
> mas a thread ja tem uma propriedade pra definir isso. Só uma
pergunta: Como
> vc pretende fazer a carga das informações dos datasets da thread para os
> datasets do formulário?
> 
> 
> 
> []´s
> 
> 
> Sérgio T. Uetanabaro
> 
> 
> 
> _____ 
> 
> De: HYPERLINK
"mailto:delphi-br%40yahoogrupos.com.br"[EMAIL PROTECTED]
[mailto:HYPERLINK
"mailto:delphi-br%40yahoogrupos.com.br"[EMAIL PROTECTED] Em
> nome de malikoski
> Enviada em: terça-feira, 18 de dezembro de 2007 16:33
> Para: HYPERLINK
"mailto:delphi-br%40yahoogrupos.com.br"[EMAIL PROTECTED]
> Assunto: [delphi-br] Thread - Problemas!
> 
> 
> 
> Pessoal, estou desenvolvendo um sistema que possui a seguinte situação:
> 
> Opções do menu carregam uma DLL que se encarrega de criar um
> formulário dinâmicamente. Logo após tenho um objeto em uma outra unit
> que possui funções para gerar os objetos visuais nesse
> formulário.(tudo dinâmicamente)
> Nesse formulário é criado um dbgrid onde é aberto uma tabela(de acordo
> com a opção do menu principal) onde assim os dados são exibidos.
> Algumas telas ficam lentas até carregar todos os dados da tabela, pois
> algumas possuem milhares de registros, assim achamos melhor usar uma
> thread para carregar essa tabela, assim o usuário abrir outro processo
> no programa. 
> Eu estou conseguindo abrir certinho na thread, mas não estou
> conseguindo atulizar alguns dados da tela como componentes que
> mostram que os dados estão carrengando, e também não consigo verificar
> quando a thread termina, pois quando ela passa la no evento
> Syncronize(minhafun--caoexemplo) ele simplesmente para de executar a
> thread e não passa pelo método (onTerminate)--. Exemplo abaixo:
> 
> função na DLL:
> 
> procedure ShowForm(NewApplica--tion, NewScreen : Pointer; FormName :
> String; Params : TStringList)--;
> 
> ...
> 
> oForm := TForm.Create(--Application.--MainForm)--;
> oForm.Name := FormName;
> 
> oMontaTela := Tmontar_tela.--Create(oForm)--;
> oMontaTela._--Montar_GRID(--oDM.oSQLConnect-i-on,
> Params.ValueFromInd--ex[viIdxCodTab]--,
> Params.ValueFromInd--ex[viIdxMat]--,oForm);
> 
> ...
> end;
> 
> na unit que existe a classe Tmontar_tela
> 
> TConsultaThread = class(TThread)
> private
> SessaoCritica: TCriticalSection;
> 
> protected
> procedure Execute; override;
> procedure Atualiza;
> public
> oDataSource : TDataSource;
> Priority : TThreadPriority;
> oQuery : TSQLQuery;
> oCDS : TClientDataSet;
> oMontatela : Tmontar_tela;
> I : integer;
> end;
> 
> ...
> ...
> ...
> 
> Tmontar_tela = class(TObject)
> private
> oThread : TConsultaThread;
> ...
> public
> function RunThread(Query : TSQLQuery; CDS : TClientDataSet; DS
> : TDataSource; MontaTela : Tmontar_Tela) : TConsultaThread;
> procedure ThreadTerminate(--Sender: TObject);
> 
> procedure Tmontar_tela.--_ShowForm(--Sender: TObject); //procedure
> atribuída manualmente (onShow)
> begin
> oThread := RunThread(SQLQ_--DB2, CDS_DB2, DS_DB2, Self);
> 
> // if not oThread.Terminated then begin
> // oThread.WaitFor;
> // end;
> 
> end;
> 
> ...
> 
> function Tmontar_tela.--RunThread(--Query : TSQLQuery; CDS :
> TClientDataSet; DS : TDataSource; 
> MontaTela : Tmontar_Tela) : TConsultaThread;
> var
> oConsThread : TConsultaThread;
> begin
> oConsThread := TConsultaThread.--Create(True)--;
> oConsThread.--FreeOnTerminate := True;
> oConsThread.--Priority := tpHigher;
> oConsThread.--OnTerminate := ThreadTerminate;
> oConsThread.--oQuery := Query;
> oConsThread.--oCDS := CDS;
> oConsThread.--oDataSource := DS;
> oConsThread.--oMontatela := MontaTela;
> oConsThread.--Resume;
> 
> Result := oConsThread;
> end;
> 
> procedure TConsultaThread.--Execute;
> var
> oConn : TSQLConnection;
> begin
> oConn := nil;
> oConn := TSQLConnection.--Create(nil)--;
> 
> with oConn do begin
> ... parâmetros de conexão
> end;
> 
> oConn.Connected := True;
> oQuery.SQLConnectio--n := oConn;
> 
> Synchronize(--Atualiza)--;
> oCDS.Close;
> oCDS.Open;
> Sleep(20);
> 
> end;
> 
> procedure TConsultaThread.--Atualiza;
> begin
> oMontatela._--PainelStatus.--Caption := 'carregando.--..';
> end;
> 
> procedure Tmontar_tela.--ThreadTerminate-(-Sender: TObject);
> begin
> _PainelStatus.--Caption := 'Pronto!...'--;
> Sleep(20);
> _PainelStatus.--Visible := False;
> Application.--ProcessMessages-;
> Sender := nil;
> end;
> 
> Desculpem a quantidade código...
> 
> obrigado
> 
> Ricardo
> 
> 
> 
> 
> 
> 
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.503 / Virus Database: 269.17.4/1188 - Release Date:
17/12/2007
> 14:13
> 
> 
> 
> No virus found in this outgoing message.
> Checked by AVG Free Edition. 
> Version: 7.5.503 / Virus Database: 269.17.4/1188 - Release Date:
17/12/2007
> 14:13
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>



 


No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.503 / Virus Database: 269.17.4/1189 - Release Date: 18/12/2007
21:40



No virus found in this outgoing message.
Checked by AVG Free Edition. 
Version: 7.5.503 / Virus Database: 269.17.4/1189 - Release Date: 18/12/2007
21:40
 


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

Responder a