Ir para conteúdo
  • Cadastre-se

dev botao

MultiThread ponteiro


Ver Solução Respondido por Thiago Henrique Gaspar,
  • Este tópico foi criado há 452 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

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?

 

 

  • Membros Pro
Postado
  Em 24/01/2024 at 16:35, Renato Rubinho disse:

Boa tarde,

Qual é a sua linguagem?

Verificou como foi feito nos programas de exemplo?

Está levantando alguns exceção?

Expandir  

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.

  • Membros Pro
Postado
  Em 24/01/2024 at 16:53, 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.

Expandir  

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?

  • Consultores
Postado
  Em 24/01/2024 at 16:21, 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))
Expandir  

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".

  Em 24/01/2024 at 16:37, 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

Expandir  

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.
  • Membros Pro
Postado
  Em 24/01/2024 at 17:54, 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.

Expandir  

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?

 

 

  • Membros Pro
  • Solution
Postado
  Em 24/01/2024 at 18:01, 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?

 

 

Expandir  

Segue código para teste.

 

teste.pyFetching info...

  • Consultores
Postado
  Em 24/01/2024 at 18:01, Thiago Henrique Gaspar disse:

estou fazendo certo desta forma?

Expandir  

Aparentemente sim.

  Em 24/01/2024 at 18:09, Thiago Henrique Gaspar disse:

Segue código para teste.

Expandir  

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

×
×
  • 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.

The popup will be closed in 10 segundos...