Add MessageQueue class

MessageQueue encapsulates a message queue built on top of a
pipe. The message queue needs a handler for receiving messages
and must be added to a worker for pumping messages through the
pipe.

Each Worker will have an instance of MessageQueue.
This commit is contained in:
Johan Wikman
2017-04-06 14:03:56 +03:00
parent d20c89be37
commit b8c78a23df
5 changed files with 427 additions and 15 deletions

View File

@ -31,25 +31,24 @@ typedef enum mxs_poll_action
MXS_POLL_ERROR = 0x10,
} mxs_poll_action_t;
struct mxs_poll_data;
/** Pointer to function that knows how to handle events for a particular
* 'struct mxs_poll_data' structure.
*
* @param data The `mxs_poll_data` instance that contained this pointer.
* @param wid The worker thread id.
* @param events The epoll events.
*
* @return A combination of mxs_poll_action_t enumeration values.
*/
typedef uint32_t (*mxs_poll_handler_t)(struct mxs_poll_data* data, int wid, uint32_t events);
typedef struct mxs_poll_data
{
/** Pointer to function that knows how to handle events for this particular
* 'struct mxs_poll_data' structure.
*
* @param data The `mxs_poll_data` instance that contained this pointer.
* @param wid The worker thread id.
* @param events The epoll events.
*
* @return A combination of mxs_poll_action_t enumeration values.
*/
uint32_t (*handler)(struct mxs_poll_data *data, int wid, uint32_t events);
mxs_poll_handler_t handler; /*< Handler for this particular kind of mxs_poll_data. */
struct
{
/**
* The id of the worker thread
*/
int id;
int id; /*< The id of the worker thread. */
} thread;
} MXS_POLL_DATA;