2016-09-21 2 views
0

다음 제어 흐름이 있습니다. for 루프에서 문자열 배열을 만듭니다. 배열의 각 행 (문자열)을 게시자 함수로 보냅니다. 그런 다음 게시자 함수는 문자열을 전송해야합니다. 게시자가 무한 루프에 게시하는 경우 구독자가 메시지를 수신하는 경우에만 문제가 발생합니다. 지속적으로 게시자 기능을 호출하여 데이터를 보내지 못하는 이유는 무엇입니까? 무한 루프에서만 작동하는 이유는 무엇입니까? 나는 동안 (1) 문을 빼앗아 때게시자가 무한 루프에서만 메시지를 전송합니다.

#include <zmq.hpp> 
#include <iostream> 
#include <sstream> 



int main (int argc, char *argv[]) 


    { 

zmq::context_t context (1); 

//Socket to talk to server 
std::cout << "Collecting updates from device server...\n" << std::endl; 
zmq::socket_t subscriber (context, ZMQ_SUB); 
subscriber.connect("tcp://localhost:5556"); 
const char *filter = (argc > 1)? argv [1]: ""; // no filter currently 
subscriber.setsockopt(ZMQ_SUBSCRIBE, filter, strlen (filter)); 
// Process 100 updates 
zmq::message_t update; 

for (int q =0 ; q<1000 ; q++) { 
    subscriber.recv(&update); 

    std::string output = std::string(static_cast<char*>(update.data()), update.size()); 


    std:: cout <<output << std:: endl;  
    } 
return 0; 







    } 

것은 왜 난 아무것도받지 않는 것을 : 여기

int zedMQserver(std::string output) 
    { 

    //std ::cout << output.c_str()<< std:: endl; 




zmq::context_t context (1); 
zmq::socket_t publisher (context, ZMQ_PUB); 
publisher.bind("tcp://*:5556"); 
publisher.bind("ipc://device.ipc");    // Not usable on Windows. 


    int i=1; 
    //while(1) { 




    // Send message to all subscribers 

    const int SIZE = output.length(); 

    zmq::message_t message(SIZE+1); 
    snprintf ((char *) message.data(), (SIZE+1) , 
     "%s", output.c_str()); 
    publisher.send(message); 
    std :: cout << "sent message" << std:: endl; 
//} 
return 0; 

내 가입자 함수 : 여기

내 게시자 기능입니다 ?

답변

0

그래서 고전적인 "느린 결합 자 문제"라는 것이 밝혀졌습니다. 나는 출판사를 잠자 게 만들었고, 그것은 효과가 있었다.

관련 문제