zeroMQ
을 여러 스레드간에 메시징 시스템을 구현하는 방법으로 사용하려고합니다. 아래 코드를 시도했지만 작동하지 않습니다. 구체적으로 각 스레드의 zmq_recv
호출은 실행될 메시지를 대기/차단하지 않습니다.ZeroMQ 메시지를 사용하여 스레드 간 통신
이 코드를 사용하면 도움이 될 수 있습니까?
나는 당신은 소켓을 종료하고 있고 ZeroMQ 당신이 스레드를 만드는 직후에 리눅스 OS 및 GCC
안부
AFG
static void *
worker_routine (void *context) {
// Socket to talk to dispatcher
void *receiver = zmq_socket (context, ZMQ_REP);
zmq_connect (receiver, "inproc://workers");
while (1) {
zmq_msg_t request;
zmq_msg_init(&request);
zmq_recv(receiver, &request, 0);
printf ("Received request\n");
// Do some 'work'
usleep (1000);
// Send reply back to client
zmq_send (receiver, &request, 0);
}
zmq_close (receiver);
return NULL;
}
int main (void) {
void *context = zmq_init (1);
void *clients = zmq_socket (context, ZMQ_REP);
zmq_bind (clients, "inproc://workers");
int thread_nbr;
for (thread_nbr = 0; thread_nbr < 5; thread_nbr++) {
pthread_t worker;
pthread_create (&worker, NULL, worker_routine, context);
}
zmq_close (clients);
zmq_term (context);
return 0;
}
. 내 목적을 위해 QUEUE와 같은 zmq_device를 만들어야 만하는지 아는 사람 있습니까? 나는 또한 프로토콜로 "ipc"를 사용하는 샘플이 있다는 것을 알아 냈다. 나는 항상 MT에서 반드시 "inproc"을 사용해야한다고 생각했다. –