Pergunta

Eu escrevi uma classe C ++ que eu preciso para compartilhar uma instância de entre pelo menos dois processos do Windows. Quais são as várias maneiras de fazer isso?

Inicialmente eu olhei para #pragma data_seg apenas para ficar desapontado quando eu percebi que não vai funcionar em classes ou com qualquer coisa que aloca na pilha.

A instância da classe deve ser acessível através de uma dll porque já existente, aplicações completas já utiliza esta DLL.

Foi útil?

Solução

Você pode potencialmente usar arquivos mapeados na memória para compartilhar dados entre processos. Se você precisar chamar funções em seu objeto, você teria que usar COM ou algo semelhante, ou você teria que implementar seu próprio protocolo RPC.

Outras dicas

boost :: interprocess . É preciso um pouco de tempo para se acostumar, mas funciona muito bem. Fiz estruturas de dados relativamente complexos na memória compartilhada que funcionou bem entre processos.

edit: ele funciona com arquivos mapeados na memória também. O ponto é que você pode usar dados de uma forma estruturada; você não tem que tratar os blocos de memória (em arquivos ou memória compartilhada) como dados apenas matérias que você tem que ler atentamente / escrita para deixar em um estado válido. Boost :: interprocess cuida dessa parte e você pode usar contêineres STL como árvores, listas, etc.

Você pode usar posicionamento novo para criar o objeto em uma zona de memória partilhada. Enquanto o objeto não usar qualquer ponteiros, que sould ficar bem.

É um POD ou que você precisa para ser capaz de compartilhar uma única instância nos processos? Você já pensou em usar o padrão Singleton (versão de inicialização estática, por razões de segurança thread)? Você vai precisar usar Mutexes, assim como para proteger as gravações simultâneas e outras coisas.

No Windows, você pode usar COM também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top