Fórum Como criar um processo em uma linha de execução diferente? #336622
22/01/2007
0
Olá a todos...
Esta dúvida minha não deveria nem ser dúvida, já que eu sei como realizar o procedimento, mas é que não está dando certo de jeito nenhum. É o seguinte:
Eu tenho um processo de importação de Script SQL que é um pouco demorado. Sendo a importação de um script inteiro eu não tenho controle do andamento da tarefa, o que significa que eu não posso usar uma barra de progresso pra indicar o andamento.
Pensei então em exibir um pequeno formulário com uma mensagem personalizada e uma animação (TAnimate) de uma ampulheta pedindo que o usuário aguardasse.
Logicamente eu teria de usar Threads da seguinte maneira (posso ter me enganado em algo aqui...):
Ao que parece, isso vai funcionar, eu acho, mas não funciona:
1. A Thread Principal fica congelada --> Se eu crio uma Thread Secundária para um processo demorado, porque a thread principal se congela?
2. A ampulheta (TANimate) no formulário criado a partir da Thread Principal não aparece, pois como ela pertence a um Form criado na Thread Principal e esta Thread está congelada, nada vai acontecer...
O que eu queria é simplesmente mostrar alguma coisa enquanto um processo demorado está ocorrendo... Nada mais que isso! Parece Simples. É simples!!! mas eu não tô conseguindo.
Quem se habilita?
Esta dúvida minha não deveria nem ser dúvida, já que eu sei como realizar o procedimento, mas é que não está dando certo de jeito nenhum. É o seguinte:
Eu tenho um processo de importação de Script SQL que é um pouco demorado. Sendo a importação de um script inteiro eu não tenho controle do andamento da tarefa, o que significa que eu não posso usar uma barra de progresso pra indicar o andamento.
Pensei então em exibir um pequeno formulário com uma mensagem personalizada e uma animação (TAnimate) de uma ampulheta pedindo que o usuário aguardasse.
Logicamente eu teria de usar Threads da seguinte maneira (posso ter me enganado em algo aqui...):
Thread Principal | Thread Secundária ------------------------------------------------------------------ 1. Mostra o formulário com a | (Não foi criada ainda) ampulheta | ------------------------------------------------------------------ 2. Executa um script rápido de | (Não foi criada ainda) Update (não demora nem 1s) | ------------------------------------------------------------------ 3. Cria a Thread Secundária em | 1. Executa o método Create do modo suspenso, passando como | Thread que configura um campo parâmetro o Script que | privado com o Script que deverá ser executado (SQL) | deverá ser executado ------------------------------------------------------------------ 4. Executa o método "Resume" do | 2. O Thread sai do seu estado de Thread recém criado | pause para seu estado de | execução. O método Execute do | Thread é executado. Dentro | dele há o comando que executa | o Script SQL demorado. O | procedimento de execução do | script é executado com o | método Syncronize ------------------------------------------------------------------ 5. Executa o método "WaitFor" | 3. O método Execute do Thread do Thread recém criado, que | ainda continua executando o só retorna quando o método | script "Execute" do Thread | secundário termina | ------------------------------------------------------------------ Execução do script. Aguardando resposta de "WaitFor" ------------------------------------------------------------------ 6. O Método "WaitFor" retorna e | (Já foi destruída) eu páro (Terminate) e | destruo (Free) a Thread | Secundária | ------------------------------------------------------------------ 7. Fecho o formulário com a | (Já foi destruída) ampulheta |
Ao que parece, isso vai funcionar, eu acho, mas não funciona:
1. A Thread Principal fica congelada --> Se eu crio uma Thread Secundária para um processo demorado, porque a thread principal se congela?
2. A ampulheta (TANimate) no formulário criado a partir da Thread Principal não aparece, pois como ela pertence a um Form criado na Thread Principal e esta Thread está congelada, nada vai acontecer...
O que eu queria é simplesmente mostrar alguma coisa enquanto um processo demorado está ocorrendo... Nada mais que isso! Parece Simples. É simples!!! mas eu não tô conseguindo.
Quem se habilita?
Carlos Filho
Curtir tópico
+ 0
Responder
Posts
23/01/2007
Carlos Filho
Nenhuma sugestão?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)