Esempio n. 1
0
        private void recvProc()
        {
            ZMQ.Socket reqs = CTX.Socket(ZMQ.SocketType.PULL);
            reqs.Connect(sub_addr);

            var items = new[] { reqs.CreatePollItem(ZMQ.IOMultiPlex.POLLIN | ZMQ.IOMultiPlex.POLLERR) };

            while (isRunning)
            {
                int res = CTX.Poll(items, 1000 * 1000);
                if (res == 0)
                {
                    continue;
                }
                foreach (byte[] data in reqs.RecvAll(ZMQ.SendRecvOpt.NOBLOCK))
                {
                    if (data == null)
                    {
                        continue;
                    }
                    recvQ.Enqueue(data);
                    itemsReadyToRecv.Set();
                }
            }

            reqs.Dispose();
            itemsReadyToRecv.Close();
            Interlocked.Decrement(ref threadStillRunning);
        }