O meu erro inexplicável

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

O meu erro inexplicável

Mensagem por JoséQuintas »

Mais um dia sem erros.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

O meu erro inexplicável

Mensagem por JoséQuintas »

No início deste post coloquei um exemplo que desviou todo o assunto para detalhes do exemplo, ao invés do real problema.
Vou dar uma enxugada nele, porque o assunto é importantíssimo.
Vou trocar por outro erro pra ficar bem claro que não tem a ver com fonte.

O erro pode não estar totalmente encerrado, e pode ser mais comum do que parece.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

O meu erro inexplicável

Mensagem por JoséQuintas »

Só recapitulando:

O erro estava em API Windows, gerando erros aleatórios.
Em outras palavras, erros em GUI, coisa que a maioria aqui usa.

GUI mistura funcionamento DO WINDOWS com funcionamento do aplicativo.
Parte do aplicativo pode ficar preso na janela Windows, em execução ou não.
Dependendo do erro, PODE, não que aconteça, mas PODE ficar parte do aplicativo funcionando enquanto outra parte foi encerrada.
ISSO NÃO TEM A VER COM USAR MULTITHREAD NO APLICATIVO, GUI por si só já tem um comportamento desse jeito.

Uma coisa semelhante que aconteceu com outro usuário:

Ele criou uma DIALOG com Timer pra fechar sozinha.
Só que essa dialog chamava outra DIALOG.
O timer acabou encerrando as rotinas da primeira dialog depois de um certo tempo, destruindo variáveis e outras coisas.
Acabou gerando um erro na dialog aberta, parecendo sem explicação.

Situação:
Janela de DIALOG é controlada pelo Windows, aguarda uma mensagem pra fechar.
Quando abre DIALOG MODAL, a janela anterior fica "suspensa", não recebe mensagens.
O timer encerrou a rotina, enviou mensagem pra dialog fechar, mas a dialog continuou na tela, afinal, não recebe mensagens.
Apenas olhando a tela, não se vê erro nenhum.
Só quando precisou de alguma coisa dessa dialog é que o erro apareceu.
Não era erro na rotina, mas mostrava como sendo na rotina, pela falta de alguma variável que foi-se embora.

Podemos considerar erro do programador, mas..... o erro foi dele ou da LIB que não previu isso?
GUI/API Windows é coisa complicada, liberar recursos pra programador pode gerar situações não previstas.
Com o tempo e com o uso, com programadores detectando problemas e solicitando correções, a LIB vai ficando mais "redonda" e evitando problemas.

Acabei chegando nesta página, do WM_CLOSE
https://learn.microsoft.com/pt-br/windo ... g/wm-close

Note que interessante a rotina de processar eventos:

Código: Selecionar todos

LRESULT CALLBACK WindowProc(
    __in HWND hWindow,
    __in UINT uMsg,
    __in WPARAM wParam,
    __in LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hWindow);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWindow, uMsg, wParam, lParam);
    }

    return 0;
}
É rotina em C, tudo bem, mas dá uma boa idéia do que acontece.
Note que tem o equivalente a OTHERWISE, o que fazer no caso de não ser mensagem prevista.
É algo como: não resolvi, resolve você, mas com outra chamada de função.

Por isso, NO MEU CASO, acho que aconteceu muita recursividade, porque ficou nessa de tentar achar alguém que resolvesse, chamando rotinas e mais rotinas.
Tava invertido, então estava resolvido, mas mesmo assim tentando achar alguém pra resolver, provavelmente recebendo a mensagem, repassando, recebendo, repassando, até que em algum momento o limite de recursividade chegava ao fim.

Mesmo assim, pode acontecer com qualquer LIB, pra situações não previstas.
Outro exemplo, colocar um controle que vai na DIALOG dentro de outro controle, de um TAB.
Tem coisas que o controle resolve, tem coisas que é a DIALOG (o "pai" dele").
Mas e quando está no TAB? TAB passou a ser o "pai" do controle.
Pode ser que esse tab precise fazer tudo que a dialog fazia e a LIB vai colocando só conforme vai precisando/acontecendo.
E isso poderia causar a mesma situação que aconteceu comigo.

Não é técnico, não sei se isso se aplica ao TAB que usei de exemplo, mas, é normal a gente ir fazendo cada vez mais uso de recursos da LIB, que podem não ter sido previstos.

Igual eu fiz, parecia estar tudo funcionando normalmente, mas internamente estava tudo errado.
E o que mais complicou, é que não dava erro todo dia, podia demorar 1 semana.

Isso me fez pensar:
Se com tudo errado demorava uma semana pra dar erro...
Se estiver só um pouco errado.... sei lá quanto tempo pode demorar...
Talvez só um programador específico, numa situação específica, num uso específico, é que o erro apareça mais vezes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

O meu erro inexplicável

Mensagem por dbsh »

Você é do meu tempo, se deu erro no cliente coloca o erro na BIOS
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

O meu erro inexplicável

Mensagem por dbsh »

Para os novatos
B - Burro
I - Ignorante
O - Operando
S - Sistema
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

O meu erro inexplicável

Mensagem por dbsh »

Falando serio.
Fiquei com um problema deste, quase um ano.
Como era aleatório e raro, fui dando barrigada.
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

O meu erro inexplicável

Mensagem por JoséQuintas »

Esse erro já tinha uns 5 anos.
Ninguém nunca reclamou.
Mas eu recebia emails de erro, pra mim parecia todo dia, mas eram máquinas diferentes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder