Я не уверен, какую библиотеку оболочки zeromq вы используете, поэтому вот пример, основанный на ядре libzmq lib.
Используйте zmq_poll , чтобы вы могли определить тайм-аут и по-прежнему выполнять блокирующее чтение.
// define one socket (could define multiple), set event on ZMQ_POLLIN.
zmq_pollitem_t items[] = {{socket1, 0, ZMQ_POLLIN, 0}};
while(1)
{
// here you are polling the socket(s) defined in items with a timeout of 10ms
int rc = zmq_poll(items, 1, 10);
// Check which item (socket) had the event
if(items[0].revents & ZMQ_POLLIN)
{
// There is data available on socket1
// So call recv here on socket1
}
// do other stuff here
}
В качестве альтернативы, если вы хотите получать уведомления только о обратных вызовах, вы можете использовать