none
Comunicação 2-vias com apenas 1 pipe. Problema: Lendo ele mesmo RRS feed

  • Pergunta

  • Pessoal, tenho uma aplicação C++ que cria o namedpipe  uma C# que se conecta a ele.

    Meu C++ (servidor) tanto escuta nesse pipe quanto escreve, pois seria uma comunicação de 2 vias.

    O problema principal é que ao C++ escrever para enviar para o C#, a thread de leitura é executada, e acontece erro de violação.

    Criação do pipe:

    	hPipe = CreateNamedPipe (lpszPipename,
    		PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,// read/write access  
    
    		PIPE_TYPE_MESSAGE | // message type pipe 
    		PIPE_READMODE_MESSAGE | // message-read mode
    		PIPE_WAIT, // blocking mode          
    
    		PIPE_UNLIMITED_INSTANCES, // max. instances    
    		BUFSIZE, // output buffer size                                                  
    		BUFSIZE, // input buffer size                                                  
    		PIPE_TIMEOUT, // client time-out                                           
    		NULL); // no security attribute


    Escrita no pipe:

    		WriteFile(hPipe, buf, 100, &cbWritten, NULL);


    Assim que escrevo, minha thread de leitura sai da linha de leitura que estava presa:

    			// aguarda recebimento de msg
    			sucessoLeitura = ReadFile (hPipe,  
    			chRequest,        
    			BUFSIZE,                 
    			&cbBytesRead,     
    			NULL);         
    
    			chRequest[cbBytesRead] = '\0';
    

    Neste momento tenho um erro de memória pois o cbBytesRead tem muitos bytes.

    A mensagem chega corretamente no aplicativo C#, porem o C++ trava por essa violação de memória.

    Acredito que o problema seja ele estar lendo ele mesmo.

    Alguma ideia de como isso pode ser resolvido?

    Agradeço desde já.

    sexta-feira, 19 de outubro de 2012 19:57