Página 1 de 1

MultiThread no Harbour

Enviado: 02 Set 2013 16:29
por vilian
Amigos,

Implementei o uso de uma função do meu sistema usando Threads, e com Harbour vai tudo bem, enquanto o sistema está sendo executado. O problema é que ao finalizar o sistema, mesmo que a Thread já tenha completado seu ciclo de processamento, sempre ocorre um erro de execução do windows (APPCRASH).

Algum de vocês já passou por isso ?

MultiThread no Harbour

Enviado: 02 Set 2013 19:37
por yugi386
Saudações,

Dê uma olhada neste tópico: https://pctoledo.org/forum/viewto ... 45&t=14420

MultiThread no Harbour

Enviado: 02 Set 2013 21:30
por vilian
Yugi,

Já tinha visto esse post, e não vi nada nele diferente do que estou fazendo... A função executada na Thread está funcionando normalmente, aliás como todo o resto no sistema. O problema só aparece quando tento finalizar o sistema, aparece uma mensagem de que o sistema não está respondendo e logo em seguida um APPCRASH...

Já monitorei e posso afirmar que todas as Thread iniciadas tiveram seus processamentos concluídos.

MultiThread no Harbour

Enviado: 02 Set 2013 21:53
por yugi386
Prezado Vilian,

Sem ter um código para analisar não é possível te ajudar diretamente.

Verifique os códigos oficiais de exemplos de Threads (pode ser que tenha algo útil): https://github.com/harbour/core/tree/master/tests/mt

Após o término das threads tente limpar o conteúdo dos ponteiros através das funções __mvXRelease ou __mvRelease Veja a documentação em: http://www.elektrosoft.it/tutorials/Har ... -guide.htm

att,

Yugi

MultiThread no Harbour

Enviado: 02 Set 2013 22:29
por vilian
Obrigado Yuri,

Vc tem razão... Vou tentar reproduzir o problema num código-fonte menor e posto aqui.

MultiThread no Harbour

Enviado: 02 Set 2013 23:29
por alxsts
Olá!

Seja bem-vindo Vilian.

O Quintas fez algumas experiências que estão no tópico multijanelas, multithread e talvez possam contribuir de alguma forma.

Verifique se você está usando a versão mais atualizada do Harbour. Pode estar usando alguma versão com bug...

MultiThread no Harbour

Enviado: 03 Set 2013 00:15
por Jairo Maia
Olá Pessoal,

Já vi este problema algumas vezes mas em máquinas que tem jogos instalados. Com Harbour não. Você poderia colocar a tela de eventos do erro? E também qual Windows você está usando? Quando dá o erro, você chegou a notar se o módulo de falhas é sempre o mesmo?

MultiThread no Harbour

Enviado: 03 Set 2013 08:47
por vilian
Utilizo Windows 7 64 bits.
A versão do Harbour é a 3.1 Rev 17222 que baixei do harbour-projet.org

MultiThread no Harbour

Enviado: 03 Set 2013 09:28
por Jairo Maia
Caro Vilian,

Esse problema não será solucionado se você não identificar o módulo da falha. Esse tipo de erro em 98% das vezes está relacionado a uma dll corrompida, na maioria das vezes por que ela foi corrompida num ataque de malware e defesa do antivirus. Normalmente se relacionado a dll basta substituir a dll. Em alguns casos isso só é possível no modo de segurança, outros com disco de boot, e a maioria das vezes de forma simples.

Isto não está relacionado ao Harbour, mas sim ao sistema operacional. Fica difícil tentar ajudar sem ver a tela de eventos do Windows para entender quem está provocando a falha.

MultiThread no Harbour

Enviado: 03 Set 2013 09:55
por vilian
Jairo,
Realmente acho que seja algo no meu ambiente mesmo, mas não consegui identificar o quê...Utilizei o código abaixo, que peguei no forum internacional e mesmo nele, a situação se repete, ou seja, consigo executar normalmente, mas ao finalizar o programa aparece a mensagem abaixo:

Imagem

Código: Selecionar todos

 #include "Fivewin.ch"

 PROC Main()
    LOCAL aObj  := Array(1000000)
    LOCAL oDlg, oButton
    PUBLIC nDestroyed := 0
    DEFINE DIALOG oDlg SIZE 400, 500
    @ 11,  0 BUTTON    oButton     PROMPT "Start"    SIZE 80,  8 ACTION Button1_Click(oDlg)
    ACTIVATE DIALOG oDlg CENTER
 RETURN

 PROC Button1_Click(oDlg)
    LOCAL n        := 0
    LOCAL pMutex   := HB_MutexCreate()
    FOR n :=1 TO 10
       StartThread( "MyFuncForThreads", pMutex, oDlg, n )
    NEXT
    WaitForThreads()
 RETURN

 PROC MyFuncForThreads(pMutex,oDlg,n)
    LOCAL cTID
    HB_MutexLock(pMutex)
    oDlg:Say(n,0,"Thread ID" + lTrim(Str(GetThreadID())) + " system id: " + lTrim(Str(GetSystemThreadID())))
    HB_MutexUnlock(pMutex)
 RETURN
Que versão do Harbour vc esta usando ?
Na linkedição mudei apenas as libs hbvmmt.lib e cw32mt.lib, vc mudou mais alguma ?
Existe alguma configuração adicional pra fazer ?
Quando vc fecha o aplicativo tem que executar alguma função ?

---
Sds,
Vilian Arraes
Belém - Pa

MultiThread no Harbour

Enviado: 03 Set 2013 10:29
por Jairo Maia
Vilian, o mais importante na janela de eventos deu pra ver, neste caso, o código de exceção. Este código significa que seu Seven está achando que seu aplicativo é malicioso. Isso é muito chato.
vilian escreveu:Existe alguma configuração adicional pra fazer ?
Sim. Neste caso no sistema de proteção do windows. Porém, antes de sugerir exceção no módulo de proteção, tente compilar com o Harbour 3.0.0 ou 3.2.0. Caso não resolva passo como alterar o módulo de proteção para seu aplicativo, mas é desaconselhável, ou seja, o erro cessa, mas não é uma solução. Você poderá voltar a ter esse problema trocando o nome do aplicativo por exemplo.

Para baixar outra versão use: Harbour 3.0.0 ou Harbour 3.2.0

Veja o que acontece.

MultiThread no Harbour

Enviado: 03 Set 2013 10:51
por vilian
Com as 2 versões do Harbour que você citou, continua o problema.

MultiThread no Harbour

Enviado: 03 Set 2013 11:32
por Jairo Maia
Pois é... Bom, descartado bug em dll, vamos fazer uma última tentativa antes de passar os procedimentos de alteração do módulo de segurança: baixe o ADWCLEANER.EXE (baixaki, superdownloads, etc) e execute em seu computador. Faça isso, porque existe a possibilidade sim deste problema ser causado por alguma praga.

Se ainda assim persistir, então na minha opinião somente mesmo neutralizando a ação do módulo de segurança para seu aplicativo.

MultiThread no Harbour

Enviado: 03 Set 2013 11:51
por vilian
Jairo,

Obrigado pela sua atenção. Tenho muito cuidado com relação a essas "pragas" e além do antivirus, faço manutenções periódicas no meu micro com o CCleaner, acho que essa podemos descartar.

Mexer no módulo de segurança do windows é algo que não pretendo fazer, simplemente por que é inviável pra mim fazer isso nos clientes, e em alguns realmente não vou poder mexer nisso.

Espalhei questionamentos acerca disso em vários forums pra ver se identifico o que está provocando o problema, enquanto não encontro solução, vou deixar Multithreads de lado.

---
Sds,
Vilian Arraes
Belém - Pa

MultiThread no Harbour

Enviado: 03 Set 2013 12:07
por Jairo Maia
Muito bom! Não esqueça de reportar aqui também ao encontrar uma solução. Valeu.