filename | src/tqueue.h |
changeset | 1245:01e0020adf88 |
next | 1296:30ecee61f811 |
author | nkeynes |
date | Sat Mar 03 00:17:36 2012 +1000 (12 years ago) |
permissions | -rw-r--r-- |
last change | Fix GLX compile |
file | annotate | diff | log | raw |
nkeynes@1245 | 1 | /** |
nkeynes@1245 | 2 | * $Id$ |
nkeynes@1245 | 3 | * |
nkeynes@1245 | 4 | * Bounded, blocking queue for inter-thread communication. Note: consumer side is |
nkeynes@1245 | 5 | * re-entrant. |
nkeynes@1245 | 6 | * |
nkeynes@1245 | 7 | * Copyright (c) 2012 Nathan Keynes. |
nkeynes@1245 | 8 | * |
nkeynes@1245 | 9 | * This program is free software; you can redistribute it and/or modify |
nkeynes@1245 | 10 | * it under the terms of the GNU General Public License as published by |
nkeynes@1245 | 11 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@1245 | 12 | * (at your option) any later version. |
nkeynes@1245 | 13 | * |
nkeynes@1245 | 14 | * This program is distributed in the hope that it will be useful, |
nkeynes@1245 | 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@1245 | 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@1245 | 17 | * GNU General Public License for more details. |
nkeynes@1245 | 18 | */ |
nkeynes@1245 | 19 | |
nkeynes@1245 | 20 | #ifndef lxdream_tqueue_H |
nkeynes@1245 | 21 | #define lxdream_tqueue_H 1 |
nkeynes@1245 | 22 | |
nkeynes@1245 | 23 | #include "glib/gtypes.h" |
nkeynes@1245 | 24 | |
nkeynes@1245 | 25 | #ifdef __cplusplus |
nkeynes@1245 | 26 | extern "C" { |
nkeynes@1245 | 27 | #endif |
nkeynes@1245 | 28 | |
nkeynes@1245 | 29 | /** |
nkeynes@1245 | 30 | * Callback function to be invoked on the consumer side. |
nkeynes@1245 | 31 | */ |
nkeynes@1245 | 32 | typedef int (*tqueue_callback)(void *); |
nkeynes@1245 | 33 | |
nkeynes@1245 | 34 | /** |
nkeynes@1245 | 35 | * Add a message to the UI queue and return immediately. |
nkeynes@1245 | 36 | */ |
nkeynes@1245 | 37 | void tqueue_post_message( tqueue_callback callback, void *data ); |
nkeynes@1245 | 38 | |
nkeynes@1245 | 39 | /** |
nkeynes@1245 | 40 | * Add a message to the UI queue and wait for it to be handled. |
nkeynes@1245 | 41 | * @return the result from the handler function. |
nkeynes@1245 | 42 | */ |
nkeynes@1245 | 43 | int tqueue_send_message( tqueue_callback callback, void *data ); |
nkeynes@1245 | 44 | |
nkeynes@1245 | 45 | /************** Consumer thread **************/ |
nkeynes@1245 | 46 | |
nkeynes@1245 | 47 | /** |
nkeynes@1245 | 48 | * Process all messages in the queue, if any. |
nkeynes@1245 | 49 | */ |
nkeynes@1245 | 50 | void tqueue_process_all(); |
nkeynes@1245 | 51 | |
nkeynes@1245 | 52 | /** |
nkeynes@1245 | 53 | * Process the first message in the queue. If no messages are on the |
nkeynes@1245 | 54 | * queue, waits for the next one to be queued and then processes it. |
nkeynes@1245 | 55 | */ |
nkeynes@1245 | 56 | void tqueue_process_wait(); |
nkeynes@1245 | 57 | |
nkeynes@1245 | 58 | #ifdef __cplusplus |
nkeynes@1245 | 59 | } |
nkeynes@1245 | 60 | #endif |
nkeynes@1245 | 61 | |
nkeynes@1245 | 62 | #endif /* !lxdream_tqueue_H */ |
.