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]