Multi thread, XHarbour 1.0.0 Console

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

Moderador: Moderadores

ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

janio escreveu:
Grande Eolo,

Estou precisando exatamente desse negócio para ir exibindo um relatório em TXT antes de este estar concluso.

Vc pode passar o caminho das pedras??

Jânio
Janio conseguil fazer alguma coisa , estou pelando pra fazer ...

té++ :f
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Ainda não tentei, porque não tive tempo pra nada.

A correria tá grande de +.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

janio escreveu:Ainda não tentei, porque não tive tempo pra nada.

A correria tá grande de +.

Jânio
Que dureza...




Pois bem , amigos ! A dias venho tentando desenvolver um relatório que seja gerado com MT , porem venho tendo o seguinte erro

hb_cdxIndexLockread: lock failure(*) erro 9170

Ao iniciar a MT e voltar para meu "browse" ele fica louco como se os indices estivessem corrompidos.


1- Apos copiar todo o DB abro o temp.dbf em uma nova area

então não mexe na area do browse()


Ps: IMPORTANTE

"Se deixar a thread ser concluida sem mexer em nada , o sistema funciona normalmente e não da esses erros estranhos de browse maluco e nem o erro sitado acima



Código: Selecionar todos

func main()

select A

user cadmaq Shared via "dbfcdx";
index xmaquinas


browse()   
  
thr:=StartThread("imprime")




*_____________________imprimir 
func imprime()

dbcopstruct("temp.dbf")
copy to  temp

Select B                           //abro em uma nova area 

use temp VIA "DBFCDX" 
dbgotop() 

**Rotina de impressão 


Close B

return(.t.)
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Eder, vc deve abrir o mesmo DBF nas duas function, com alias diferente sendo que a primeira vc pode abrir como READONLY e a segunda func vai ser a que vai registrar nos dbf, claro que a primeir a func deve ter um dispositivo de dar um refresh no DBF.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

sygecom escreveu:Eder, vc deve abrir o mesmo DBF nas duas function, com alias diferente sendo que a primeira vc pode abrir como READONLY e a segunda func vai ser a que vai registrar nos dbf, claro que a primeir a func deve ter um dispositivo de dar um refresh no DBF.

Leo , é o contrario , quem vai abrir como readonly é o segundo .DBF pois irei continuar usando o primeiro enquanto o relatorio é processador no segundo

Tentei abrir o mesmo DBF em outra area e da erro "dbf in use "
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Eder, veja bem, o primeiro vai apenas visualizar o que o segundo vai esta acresentando , ou seja o primeiro abre como READONLY e o segundo como SHARED para poder gravar, mostre como vc tentou abrir.....não pode usar o mesmo alias.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Uma pergunta: alguém um dia já fez algo semelhante (duplo acesso) com sucesso? Se não, outra pergunta: o RDD do xHarbour é thread safe? Se não, pode ser esse o problema.

Exemplo simples, pra quem não entendeu: na VCL da Borland, quando se quer fazer coisa semelhante com um SGBD qualquer, não se deve usar a mesma conexão para o duplo acesso. Uma thread extra sempre requer uma conexão exclusiva. Senão, é pau na certa. Isso porque, numa conexão única, as threads devem concorrer pelo mesmo recurso usando o mesmo espaço de nomes, e tudo acaba virando uma salada.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder