我試圖使用zeroMQ
作爲在多個線程之間實現消息傳遞系統的一種方式。我嘗試了下面的代碼,但它不起作用;在具體的每個線程中調用zmq_recv
不會等待/阻止任何消息被執行。使用ZeroMQ消息的線程間通信
你能幫我這段代碼嗎?
我使用Linux操作系統和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;
}
我再次閱讀指南ZeroMQ。有誰知道我是否需要爲我的目的創建一個像QUEUE這樣的zmq_device?我還注意到,有樣本使用「ipc」作爲協議..我總是認爲對於MT我必須使用「inproc」..任何人都知道這是否會產生影響? – 2011-03-29 21:44:58