On Tue, Sep 20, 2011 at 2:02 PM, Gaspard Bucher <[email protected]> wrote: > > > On Tue, Sep 20, 2011 at 8:59 AM, Maciej Gajewski > <[email protected]> wrote: >> >> I did it and it works nicely on Linux and Windows. >> >> You need to disable the notifier before calling ZMQ_EVENTS (and >> reading the message if available) and enable if afterwards. >> >> Pseudocode: >> >> void OnSocketReadable(zmqsocket, notifier) >> { >> notifier.setEnabled(false); >> CheckForEventsAndRead(zmqsocket); >> notifier.setEnabled(true); >> } >> >> bool HasIncoming(zmqsocket) >> { >> qint32 events = 0; >> std::size_t eventsSize = sizeof(events); >> zmqsocket.getsockopt(ZMQ_EVENTS, &events, &eventsSize); >> return (events & ZMQ_POLLIN); >> } >> >> void CheckForEventsAndRead(zmqsocket) >> { >> if (HasIncoming(zmqsocket)) >> ReadMessage(zmqsocket); >> } >> >> cheers, >> >> Maciek >> >> On 19 September 2011 19:41, Gaspard Bucher <[email protected]> wrote: >> > Hi list ! >> > I am trying to use zeromq with a Qt application and I want to avoid >> > having >> > multiple threads >> > so I tried to use ZMQ_FD and pass this to QSocketNotifier but only the >> > first >> > message is >> > signaled. My guess is that zmq does not keep the file descriptor in >> > read-ready state but >> > just signals the first element ? >> > Pseudo-code: >> > 1. get zmq fd >> > 2. create QSocketNotifier with 'Read' events >> > 3. app exec >> > .. >> > 4. first (or many) messages arrive >> > 5. ---> QSocketNotifier fires >> > 6. get 1 message >> > 7. wait for QSocketNotifier to fire again >> > 8. .... never happens >> > My guess is that there is something I do not understand regarding the >> > ZMQ_FD >> > file descriptor. >> > Maybe it only retriggers "read-ready" if the queue has been emptied ? >> > Thanks for your help, >> > Gaspard >> > >> > _______________________________________________ >> > zeromq-dev mailing list >> > [email protected] >> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> > >> > > > Hi everyone ! > Thanks for your support: I managed to create a scheduler that automagically > switches from zmq_poll to Qt's event loop. I have no idea how I could have > coded this in C/C++, but in Lua it works seamlessly thanks to coroutines. > Pseudo-code: > 1. check for event (getsockopt...) > 2. if event not ready > 2.1 register filedescriptor in QSocketNotifier > 2.2 ... yield > 3. event is ready: recv > Real code (also makes sure the gui thread cannot be choked by an inbox that > is never emptied): > http://bit.ly/ovgAB7 > When Qt is not loaded, I use zmq_poll for all sockets (posix, zmq) and > timers and it's all working like a charm. Choosing zmq for my network layer > was definitely very well inspired. > Thank you guys ! > Gaspard >
There the two Qt ports on the project labs page[1]. I think the nzmqt one is more complete.. not sure. [1] http://www.zeromq.org/docs:labs#toc6 > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > > _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
