Hi, The main question is why do you abstract away czmq and sockets? What problem do you want to solve?
Anyway an example of abstraction over zeromq sockets is mlm_client_t from zeromq malamute project. Each client has own actor communicating with server and msgpipe inproc socket used to communicate between actor and client thread. Btw: you're right that it's better to pass messages to client rather than execute callbacks from main thread inside actor thread. Michal Dne 19. 1. 2018 9:52 odpoledne napsal uživatel "Kevin Wang" < [email protected]>: > Hello everyone, > > I am building a client API that abstracts away sockets and the Zeromq and > CZMQ layer. To do that, my class has a zactor containing a zloop, polling > on all the various sockets in the class. > > I eventually want my users to define their own "events", which are > messages containing an event name (string) and associated data in the next > frame, and for them to write their own functions that are called by the > zloop when their messages arrive. I am doing this by creating a virtual > function for them to override, which they can use to define their own > behavior. > > And everything was good, until I realized that their defined function > would be called in the zactor thread, not the user's thread. If they chose > to define their function to change some variable or call some other > function, that would cause a race condition. > > At least, that is what I think could happen. I realize that this is only > loosely related to zeromq, and more about API design, but is there anyone > else that has run into this problem? Is this a valid concern? > > My proposed solution would be to push these event messages to the user > thread, and make the user call a processEvents() function when they can, > which pulls the event messages and acts on them. > > Similar to: > > while(!quitCondition){ > > client.processEvents() > > //Run other code > > } > > I am new to dealing with threads and am not sure if this is a common > pattern, or if there is something basic I am missing. > > > Thanks > > Kevin > > _______________________________________________ > zeromq-dev mailing list > [email protected] > https://lists.zeromq.org/mailman/listinfo/zeromq-dev >
_______________________________________________ zeromq-dev mailing list [email protected] https://lists.zeromq.org/mailman/listinfo/zeromq-dev
