Ir para conteúdo
  • Cadastre-se

dev botao

MultiThread ponteiro


Ver Solução Respondido por Thiago Henrique Gaspar,

Recommended Posts

  • Membros Pro

Olá pessoal, tudo bem?

Estou com um problema ao implementar o AcBr Lib com MultiThread, estou conseguindo chamar o Inicializar, mas quando chamo o Finalizar não estou conseguindo.

 

Chamo o Initializar passando como argumento a ref do ponteiro, string do arquivo de conf, e a senha, segue:

f'{prefix}_Inicializar': Signature([POINTER(c_int), c_char_p, c_char_p]),
retorno = self._invocar(metodo)(byref(self.pointeiro), self._b(arq_config), self._b(chave_crypt))

Está dando certo esta parte, esta retornando 0, porém quando eu chamo o finalizar não estou conseguindo, estou chamando da seguinte forma.

f'{prefix}_Finalizar': Signature([POINTER(c_int)]),
retorno = self._invocar(metodo)(byref(self.pointeiro))

 

No caso estou passando a referencia como primeiro argumento também, não sei se está o certo, tentei passar a variavel, a referencia, nenhuma forma deu certo, alguém poderia dar uma luz?

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 minuto atrás, Renato Rubinho disse:

Boa tarde,

Qual é a sua linguagem?

Verificou como foi feito nos programas de exemplo?

Está levantando alguns exceção?

Obrigado pelo retorno Renato.

Estou utilizando Python, estou utilizando um código em Node como base, mas não tenho muito conhecimento também de Node, estou tentando replicar em Python.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
7 minutos atrás, Renato Rubinho disse:

Verifique se o ponteiro foi alimentado, se não está nulo.

Não conheço python, mas acredito que não precise do byref ao passar o ponteiro para finalizar.

no Inicializar ele aceita o argumento que eu passo, mas no finalizar ele não aceita, crasha o sistema.

Sabe me dizer como eu tenho que passar o ponteiro no initializar e como eu tenho que passar no finalizar?

Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, Thiago Henrique Gaspar disse:

Chamo o Initializar passando como argumento a ref do ponteiro, string do arquivo de conf, e a senha, segue:

f'{prefix}_Inicializar': Signature([POINTER(c_int), c_char_p, c_char_p]),
retorno = self._invocar(metodo)(byref(self.pointeiro), self._b(arq_config), self._b(chave_crypt))

No inicializar você vai passar uma variável que vai receber uma referência de ponteiro. Essa referência você vai utilizar em todas as próximas chamadas "dessa Thread".

1 hora atrás, Thiago Henrique Gaspar disse:

Estou utilizando Python, estou utilizando um código em Node como base, mas não tenho muito conhecimento também de Node

Dá uma olhada nesse código em python criado por usuários ACBr para utilizar a ACBrLibCEP:

https://github.com/base4sistemas/acbrlib-python/

Pode ajudar você a entender com funciona.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 minuto atrás, EMBarbosa disse:

No inicializar você vai passar uma variável que vai receber uma referência de ponteiro. Essa referência você vai utilizar em todas as próximas chamadas "dessa Thread".

Dá uma olhada nesse código em python criado por usuários ACBr para utilizar a ACBrLibCEP:

https://github.com/base4sistemas/acbrlib-python/

Pode ajudar você a entender com funciona.

Estou levando como base esse repositório, porém ele utiliza ai SingleThread,o SingleThread funciona normal, estou me batendo para rodar o MultiThread.

Estou fazendo o seguinte exemplo:

self.pointeiro = c_int()
print("INICIALIZAR", self.pointeiro)
retorno = arq.CEP_Inicializar(byref(self.pointeiro), self._b(arq_config), self._b(chave_crypt))
print("FINALIZAR",  self.pointeiro)
retorno = arq.CEP_Finalizar(self.pointeiro)
 

está me retornando o seguinte:

INICIALIZAR c_int(0)
FINALIZAR c_int(281032000)

Em seguida da crash na linha que chama o Finalizar. o Inicializar está dando certo, passando a referencia do ponteiro para ele, porém quando eu passo essa mesma variavel para o finalizar, é que ele não consegue utilizar, estou fazendo certo desta forma?

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
  • Solution
8 minutos atrás, Thiago Henrique Gaspar disse:

Estou levando como base esse repositório, porém ele utiliza ai SingleThread,o SingleThread funciona normal, estou me batendo para rodar o MultiThread.

Estou fazendo o seguinte exemplo:

self.pointeiro = c_int()
print("INICIALIZAR", self.pointeiro)
retorno = arq.CEP_Inicializar(byref(self.pointeiro), self._b(arq_config), self._b(chave_crypt))
print("FINALIZAR",  self.pointeiro)
retorno = arq.CEP_Finalizar(self.pointeiro)
 

está me retornando o seguinte:

INICIALIZAR c_int(0)
FINALIZAR c_int(281032000)

Em seguida da crash na linha que chama o Finalizar. o Inicializar está dando certo, passando a referencia do ponteiro para ele, porém quando eu passo essa mesma variavel para o finalizar, é que ele não consegue utilizar, estou fazendo certo desta forma?

 

 

Segue código para teste.

 

teste.py

Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, Thiago Henrique Gaspar disse:

estou fazendo certo desta forma?

Aparentemente sim.

1 hora atrás, Thiago Henrique Gaspar disse:

Segue código para teste.

Como disse, não conheço python, mas segue uma sugestão que vi que talvez possa ser um problema

acbr_lib.NFE_Finalizar.argtypes = (c_int,)

Nesta declaração você colocou uma vírgula a mais

 

Tente no nosso canal do Discord, específico da lib + python, que talvez você consiga alguma dica.

https://discord.com/channels/798697718800318484/890605241668612126

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.