REVELAR

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...):

    
        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

Carlos Filho

Responder

Posts

23/01/2007

Carlos Filho

Nenhuma sugestão?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar