none
Integração C++ / C# duvida RRS feed

  • Pergunta

  • Olá, estou com uma séria duvida em relação à integração de C++(Dll) com C#(Programa), pois minha aplicação é um pequeno servidor onde se tem vários Threads para os usuários, até ai tudo bem, mas ao abrir alguns Threads (7 ou mais) depois de um tempo o programa simplesmente para de funcionar e fecha, o try / catch sequer é acionado e não Depura ou retorna erro, no Visual Studio não retorna erro e sequer fecha, apenas fica travado.

    Começo a desconfiar da possibilidade de ser algum problema como chamar a mesma função da Dll C++ ao mesmo tempo por outro Thread com argumentos diferentes, ou iguais, independente do argumento creio que possa ser o fato de chamar a mesma função mais de uma vez.

    Por exemplo uma função C++ como:

    void Crypt(unsigned char* buffer){
       for(int i...)
          buffer[i] ^= 0x11;
    }
    
    

    Ser chamada no C# por 2 Threads ao mesmo tempo como por exemplo nesta linha:

    void CryptBytes(ref buffer){
       Cpp.Crypt(ref buffer);
    }

    Será que isto poderia gerar algum erro?

    E se sim, como faço para chamar uma função de C++ Múltiplas vezes por vários Threads ao mesmo tempo sem ter erros? Se tiver que fazer alguma alteração no código C++ qual seria, ou em C#, seja lá qual for o problema gostaria muito de receber dicas.

    Agradeço!!

    terça-feira, 22 de março de 2016 21:22

Respostas

  • Boa tarde Smo,

    Isso se chama DeadLock

    "O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo, o qual, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo."

    Eu diria para você criar a nível de sistema, uma chamada enfileirada, afim de não ter esse problema.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ quarta-feira, 23 de março de 2016 20:09
    quarta-feira, 23 de março de 2016 19:39

Todas as Respostas

  • Boa tarde Smo,

    Isso se chama DeadLock

    "O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo, o qual, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo."

    Eu diria para você criar a nível de sistema, uma chamada enfileirada, afim de não ter esse problema.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ quarta-feira, 23 de março de 2016 20:09
    quarta-feira, 23 de março de 2016 19:39
  • Boa tarde Smo,

    Isso se chama DeadLock

    "O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo, o qual, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo."

    Eu diria para você criar a nível de sistema, uma chamada enfileirada, afim de não ter esse problema.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Olá Roberto, obrigado pela ajuda, mas se não for muito incomodo, poderia me dar dicas de como eu poderia fazer essa chamada enfileirada?
    quinta-feira, 24 de março de 2016 23:34