nkeynes@1245: /** nkeynes@1245: * $Id$ nkeynes@1245: * nkeynes@1245: * Bounded, blocking queue for inter-thread communication. Note: consumer side is nkeynes@1245: * re-entrant. nkeynes@1245: * nkeynes@1245: * Copyright (c) 2012 Nathan Keynes. nkeynes@1245: * nkeynes@1245: * This program is free software; you can redistribute it and/or modify nkeynes@1245: * it under the terms of the GNU General Public License as published by nkeynes@1245: * the Free Software Foundation; either version 2 of the License, or nkeynes@1245: * (at your option) any later version. nkeynes@1245: * nkeynes@1245: * This program is distributed in the hope that it will be useful, nkeynes@1245: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@1245: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@1245: * GNU General Public License for more details. nkeynes@1245: */ nkeynes@1245: nkeynes@1245: #ifndef lxdream_tqueue_H nkeynes@1245: #define lxdream_tqueue_H 1 nkeynes@1245: nkeynes@1245: #include "glib/gtypes.h" nkeynes@1245: nkeynes@1245: #ifdef __cplusplus nkeynes@1245: extern "C" { nkeynes@1245: #endif nkeynes@1245: nkeynes@1245: /** nkeynes@1245: * Callback function to be invoked on the consumer side. nkeynes@1245: */ nkeynes@1245: typedef int (*tqueue_callback)(void *); nkeynes@1245: nkeynes@1245: /** nkeynes@1245: * Add a message to the UI queue and return immediately. nkeynes@1245: */ nkeynes@1245: void tqueue_post_message( tqueue_callback callback, void *data ); nkeynes@1245: nkeynes@1245: /** nkeynes@1245: * Add a message to the UI queue and wait for it to be handled. nkeynes@1245: * @return the result from the handler function. nkeynes@1245: */ nkeynes@1245: int tqueue_send_message( tqueue_callback callback, void *data ); nkeynes@1245: nkeynes@1245: /************** Consumer thread **************/ nkeynes@1245: nkeynes@1245: /** nkeynes@1245: * Process all messages in the queue, if any. nkeynes@1245: */ nkeynes@1245: void tqueue_process_all(); nkeynes@1245: nkeynes@1245: /** nkeynes@1245: * Process the first message in the queue. If no messages are on the nkeynes@1245: * queue, waits for the next one to be queued and then processes it. nkeynes@1245: */ nkeynes@1245: void tqueue_process_wait(); nkeynes@1245: nkeynes@1245: #ifdef __cplusplus nkeynes@1245: } nkeynes@1245: #endif nkeynes@1245: nkeynes@1245: #endif /* !lxdream_tqueue_H */