Aplicativo rodando (Não está respondendo)

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Aplicativo rodando (Não está respondendo)

Mensagem por NiltonGM »

Olá pessoal,

Fiz um sisteminha de migração dos registros em clipper (.dbf) para o MySQL e no laço de um Do While como tem que subir pra web muitos registros (mais de 12mil), sempre quando tiro de foco o aplicativo (clico com mouse em outro aplicativo enquanto está fazendo upload dos registros vou fazer outra coisa em outro aplictivo). Acontece que o Windows pensa que o aplicativo de migração não está respondendo. Vi aqui no forum para usar uma função que depende da GUI, tentei usar HMG_PROCESSMESSAGE(), HB_PROCESSMESSAGE() ou HGW_PROCESSMESSAGE() mas essa função não existe e não pude criar o executável.
Uso a versão HMG 3.3.1 32Bits com Win 8.1 pro 64bits.

Valeu.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Aplicativo rodando (Não está respondendo)

Mensagem por Pablo César »

Sem código exemplo, não tem como ajudar... não dá pra entender o que você fez ou tentou fazer...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Aplicativo rodando (Não está respondendo)

Mensagem por carlos_dornelas »

Não bastaria colocar o DO EVENTS dentro do laço DO WHILE?

Antonio Carlos
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Aplicativo rodando (Não está respondendo)

Mensagem por NiltonGM »

Oi Pessoal,

Queimou o HD do meu PC, desculpe a demora, bem, eu resolvi colocando uma mensagem por meio segundo e o windows não mais entendeu que o sistema não estava respondendo. Usei a MessageBoxTimeout();
MessageBoxTimeout('id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28), "Clientes",, 500).

Segue o trecho do programa do laço While.

Código: Selecionar todos

clie_dbf->(dbGoTop())

          do while clie_dbf->(!EOF())

             nTime++

             if nTime > 300
                nTime := 0
                MessageBoxTimeout('id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28), "Clientes",, 2000)
             end

             //hmg_processmessage()
             Main.ProgressBar_LoadClientes.Value := Main.ProgressBar_LoadClientes.Value + 1

             if ClieValido()

                cSQL := "INSERT INTO clientes ("
                cSQL += "clie_id, "
                cSQL += "clie_categoria, "
                cSQL += "clie_ativo, "
                cSQL += "clie_tipo_documento, "
                cSQL += "emp_id, "
                cSQL += "clie_razao_social, "
                cSQL += "clie_tipo_estabelecimento, "
                cSQL += "clie_cnpj, "
                cSQL += "clie_ie_isento, "
                cSQL += "clie_inscr_estadual, "
                cSQL += "clie_contrib_icms, "
                cSQL += "clie_cpf, "
                cSQL += "clie_situacao_cadastral, "
                cSQL += "clie_logradouro, "
                cSQL += "clie_numero, "
                cSQL += "clie_complemento, "
                cSQL += "clie_bairro, "
                cSQL += "clie_cep, "
                cSQL += "cid_id, "
                cSQL += "clie_fone1, "
                cSQL += "clie_fone2, "
                cSQL += "clie_seguradora, "
                cSQL += "clie_apolice, "
                cSQL += "clie_forma_aplicar_seguro, "
                cSQL += "clie_seguro_desconto, "
                cSQL += "clie_seguro_intra_estadual, "
                cSQL += "clie_seguro_inter_estadual, "
                cSQL += "clie_seguro_adval_tipo_1, "
                cSQL += "clie_seguro_adval_tipo_2, "
                cSQL += "clie_tom_aceita_frete_pago, "
                cSQL += "clie_tom_aceita_frete_a_pagar, "
                cSQL += "clie_tom_aceita_frete_outros, "
                cSQL += "clie_tom_aceita_suframa, "
                cSQL += "clie_tom_tabela, "
                cSQL += "clie_des_aceita_frete_a_pagar, "
                cSQL += "clie_des_inscricao_suframa, "
                cSQL += "clie_codigo_antigo) "
                cSQL += "VALUES ("

                n++

                Main.Label_contador.Value := 'id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28)

                cSQL += ltrim(str(n)) + ", "
                cSQL += "4, "   // Categoria: 0 - Remetente, 1 - Expedidor, 2 - Recebedor, 3 - Destinatário, 4 - Todos

                // Ativa ou Inativa o cliente por inconsistencia no cpf ou cnpj

                if clie_dbf->FIS_JUR == "F"
                   if CPF( HMG_PADR(allTrim(clie_dbf->CGC),11,"0") )
                      cSQL += "1, "         // Cliente Ativo no sistema, seu CPF é válido
                      cSituacao := "NULL, "   // Situação Cadastral (N/A)
                   else
                      cSQL += "0, "         // Cliente Inativado, seu CPF não é válido
                      cSituacao := "'CPF INVALIDO', "       // Situação Cadastral
                   end
                else
                   if is_cnpj( HMG_PADR(allTrim(clie_dbf->CGC),14,"0") )
                      cSQL += "1, "         // Cliente Ativo no sistema, seu CNPJ é válido
                      cSituacao := "NULL, "   // Situação Cadastral (N/A)
                   else
                      cSQL += "0, "         // Cliente Inativado, seu CPF não é válido
                      cSituacao := "'CNPJ INVALIDO', "       // Situação Cadastral
                   end
                end

                cSQL += iif(clie_dbf->FIS_JUR == 'F', "'CPF', ", "'CNPJ', ")
                cSQL += "1, "   // Empresa: 1 - Alexpress AP
                cSQL += "'" + clie_dbf->NOME + "', "

                do case
                case clie_dbf->ESTABELEC == "C"
                     cSQL += "'COMERCIAL', "
                case clie_dbf->ESTABELEC == "T"
                     cSQL += "'TRANSPORTADORA', "
                case clie_dbf->ESTABELEC == "I"
                     cSQL += "'INDÚSTRIA', "
                case clie_dbf->ESTABELEC == "M"
                     cSQL += "'COMUNICAÇÕES', "
                case clie_dbf->ESTABELEC == "E"
                     cSQL += "'ENERGIA ELÉTRICA', "
                case clie_dbf->ESTABELEC == "R"
                     cSQL += "'PRODUTOR RURAL', "
                case clie_dbf->FIS_JUR == 'F'
                     cSQL += "'PESSOA FÍSICA', "
                otherwise
                     cSQL += "'COMERCIAL', "
                endcase

                cSQL += iif( !(clie_dbf->FIS_JUR=="F"), "'" + HMG_PADR(allTrim(clie_dbf->CGC),14,"0") + "', ", "NULL, " )
                cSQL += clie_isento() + ", "

                if (clie_dbf->FIS_JUR=="F")
                   x := "NULL"
                else
                   x := extrai_numero(clie_dbf->INSCRICAO)
                   if empty(x)
                      x := "NULL"
                   else
                      x := "'" + x + "'"
                   end
                end

                cSQL += x + ", "   // Inscricao Estadual
                cSQL += if(clie_dbf->ICMSC=="S", "1","0") + ", "
                cSQL += if( clie_dbf->FIS_JUR=="F", "'" + HMG_PADR(allTrim(clie_dbf->CGC),11,"0") + "', ", "NULL, " )
                cSQL += cSituacao  // Situação Cadastral
                cSQL += "'" + clie_dbf->ENDERECO + "', "
                cSQL += "'" + if(empty(clie_dbf->NUMERO), "S/N", clie_dbf->NUMERO) + "', "
                cSQL += "'" + clie_dbf->COMPLEMEN + "', "
                cSQL += "'" + clie_dbf->BAIRRO + "', "
                cSQL += "'" + clie_dbf->CEP + "', "
                cSQL += ltrim(str(nCid_id)) + ", "

                x := extrai_numero(clie_dbf->FONE)

                if empty(x)
                   x := "NULL"
                else
                   x := "'" + HB_ULEFT(x,2) + " " + HB_USUBSTR( x, 3 ) + "'"
                end

                cSQL += x + ", "

                x := extrai_numero(clie_dbf->FAX)

                if empty(x)
                   x := "NULL"
                else
                   x := "'" + HB_ULEFT(x,2) + " " + HB_USUBSTR( x, 3 ) + "'"
                end

                cSQL += x + ", "

                if empty(clie_dbf->SEGURA)
                   cSQL += "NULL, NULL, "
                else
                   x := alltrim(clie_dbf->SEGURA)
                   if HMG_LEN(x) < 4 .or. HMG_LEN(alltrim(clie_dbf->APOLICE)) < 4
                      cSQL += "NULL, NULL, "
                   else
                      cSQL += "'" + x + "', "
                      cSQL += "'" + alltrim(clie_dbf->APOLICE) + "', "
                   end
                end

                cSQL += "2, 0, "
                cSQL += ltrim(str(clie_dbf->TXSEGINTRA,9,6)) + ", "
                cSQL += ltrim(str(clie_dbf->TXSEGINTER,9,6)) + ", "
                cSQL += "0, 0, 1, 1, 0, "
                cSQL += if(clie_dbf->SUFRAMA=="S", "1","0") + ", "

                if clie_dbf->CODTABGL > "699"
                   cSQL += "'ESPECIAL', "
                else
                   cSQL += "'NACIONAL', "
                end

                cSQL += iif(clie_dbf->FOB=="N","1","0") + ", "
                cSQL += iif(empty(clie_dbf->INSCRSUFR), "NULL, ", "'" + clie_dbf->INSCRSUFR + "', ")
                cSQL += "'" + clie_dbf->CODIGO + "');"

                oQuery := ExecutaQuery(cSQL)

                if !ExecutouQuery(@oQuery,cSQL)
                   FSEEK(nHlCli,0,2)
                   FWRITE(nHlCli,"COMANDO SQL ----------------------" + CRLF + cSQL + CRLF + CRLF + "ERRO SQL -------------------------" + CRLF + "ERRO DE CONEXÃO COM O SERVIDOR" + CRLF + CRLF + CRLF)
                   aadd(aErros, {str(n,10), alltrim(clie_dbf->NOME), "ERRO DE CONEXÃO COM O SERVIDOR"})
                   Exit
                end

                if oQuery:NetErr()
                   FSEEK(nHlCli,0,2)
                   FWRITE(nHlCli,"COMANDO SQL ----------------------" + CRLF + cSQL + CRLF + CRLF + "ERRO SQL -------------------------" + CRLF + oQuery:Error() + CRLF + CRLF + CRLF)
                   aadd(aErros, {str(n,10), alltrim(clie_dbf->NOME), oQuery:Error()})
                else
                   Grava_Contatos(n)
                   Grava_clieFaturas(n)
                end

             end

             clie_dbf->(dbSkip())

          enddo
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
amarante
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 03 Set 2013 18:47
Localização: Araruama/RJ

Aplicativo rodando (Não está respondendo)

Mensagem por amarante »

NiltonGM,
Tente colocar o comando DO EVENTS dentro do loop.
Espero ter ajudado.
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Aplicativo rodando (Não está respondendo)

Mensagem por Cavalo Marinho »

Estou tendo o mesmo problema que o Nilton, acontece que no meu caso não é um loop, é minha rotina de indexação dos arquivos, ou seja tenho uma função onde indexo todas as minha tabelas, acontece que ao indexar tabelas grandes o sistema coloca uma mensagem de não esta respondendo, coloquei ao final de cada tabela indexada um do events, ela retira a mensagem, mas logo na próxima tabela acontece novamente, o sistema continua a indexar até o final, não interrompe, mas fica uma coisa meio chata para que está utilizando o sistema. Aguem tem uma luz?
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Aplicativo rodando (Não está respondendo)

Mensagem por Claudio Soto »

Cavalo Marinho escreveu:Estou tendo o mesmo problema que o Nilton, acontece que no meu caso não é um loop, é minha rotina de indexação dos arquivos, ou seja tenho uma função onde indexo todas as minha tabelas, acontece que ao indexar tabelas grandes o sistema coloca uma mensagem de não esta respondendo, coloquei ao final de cada tabela indexada um do events, ela retira a mensagem, mas logo na próxima tabela acontece novamente, o sistema continua a indexar até o final, não interrompe, mas fica uma coisa meio chata para que está utilizando o sistema. Aguem tem uma luz?
Existe una forma, pero cuidado:
1) porque mientras el programa este ocupado si no se puede llamar a DO EVENTS no se podrá mover, cerrar, minimizar, etc. la ventana
2) además una vez que se llama a la función DisableProcessWindowsGhosting() no se podrá desactivarla, es decir siempre que el programa este ocupado presentara el comportamiento descrito en el punto anterior

Código: Selecionar todos

#include "hmg.ch"

Function Main()

   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 200 ;
      HEIGHT 200 ;
      MAIN;
      TITLE 'Button Test'

      @ 50,50 BUTTON Button_1 CAPTION "Test" ACTION Test() 

   END WINDOW

   CENTER WINDOW Form_1
   ACTIVATE WINDOW Form_1
Return


Procedure Test()

   DisableProcessWindowsGhosting ()
   
   For i := 1 to 100000
      Form_1.Title := HB_NTOS (i)
   next
Return



#pragma BEGINDUMP
#include <windows.h>
#include <tchar.h>
#include "hbapi.h"


#define HMG_OFICIAL  FALSE // TRUE


#if HMG_OFICIAL

   #include "HMG_UNICODE.h"

#else

   #define HMG_DEFINE_DLL_FUNC(\
                              _FUNC_NAME,             \
                              _DLL_LIBNAME,           \
                              _DLL_FUNC_RET,          \
                              _DLL_FUNC_TYPE,         \
                              _DLL_FUNC_NAMESTRINGAW, \
                              _DLL_FUNC_PARAM,        \
                              _DLL_FUNC_CALLPARAM,    \
                              _DLL_FUNC_RETFAILCALL   \
                              )\
   \
   _DLL_FUNC_RET _DLL_FUNC_TYPE _FUNC_NAME _DLL_FUNC_PARAM \
   {\
      typedef _DLL_FUNC_RET (_DLL_FUNC_TYPE *PFUNC) _DLL_FUNC_PARAM;\
      static PFUNC pfunc = NULL;\
      if (pfunc == NULL)\
      {\
         HMODULE hLib = LoadLibrary (_TEXT (_DLL_LIBNAME) );\
         pfunc = (PFUNC) GetProcAddress (hLib, _DLL_FUNC_NAMESTRINGAW);\
      }\
      if(pfunc == NULL)\
         return ((_DLL_FUNC_RET) _DLL_FUNC_RETFAILCALL);\
      else\
         return pfunc _DLL_FUNC_CALLPARAM;\
   }

#endif

HMG_DEFINE_DLL_FUNC ( win_DisableProcessWindowsGhosting,                  // user function name
                      "User32.dll",                                       // dll name
                      VOID,                                               // function return type
                      WINAPI,                                             // function type
                      "DisableProcessWindowsGhosting",                    // dll function name
                      (VOID),                                             // dll function parameters (types and names)
                      (),                                                 // function parameters (only names)
                      0                                                   // return value if fail call function of dll
                    )


HB_FUNC ( DISABLEPROCESSWINDOWSGHOSTING )
{
   win_DisableProcessWindowsGhosting ();
}


#pragma ENDDUMP
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Aplicativo rodando (Não está respondendo)

Mensagem por NiltonGM »

Só pra deixar registrado, foi resolvido com o comando 'DO EVENTS' com a dica do amigo acima.

Obrigado a todos.
Nilton Medeiros
nilton@sistrom.com.br
Responder