diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2012-03-25 20:00:08 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2012-03-25 20:00:08 +0000 |
| commit | 469bbcf0701e1eb8a6670c23145b0da87357e178 (patch) | |
| tree | b5b062a16e46a6c5d3410b4e574cd0cc09057211 /src/condition.h | |
| parent | ee1b79396076edc4e30aefb285fada03bb45e80d (diff) | |
| download | libbu++-469bbcf0701e1eb8a6670c23145b0da87357e178.tar.gz libbu++-469bbcf0701e1eb8a6670c23145b0da87357e178.tar.bz2 libbu++-469bbcf0701e1eb8a6670c23145b0da87357e178.tar.xz libbu++-469bbcf0701e1eb8a6670c23145b0da87357e178.zip | |
Code is all reorganized. We're about ready to release. I should write up a
little explenation of the arrangement.
Diffstat (limited to 'src/condition.h')
| -rw-r--r-- | src/condition.h | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/condition.h b/src/condition.h deleted file mode 100644 index 71634f5..0000000 --- a/src/condition.h +++ /dev/null | |||
| @@ -1,90 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007-2011 Xagasoft, All rights reserved. | ||
| 3 | * | ||
| 4 | * This file is part of the libbu++ library and is released under the | ||
| 5 | * terms of the license contained in the file LICENSE. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef BU_CONDITION_H | ||
| 9 | #define BU_CONDITION_H | ||
| 10 | |||
| 11 | #include <pthread.h> | ||
| 12 | |||
| 13 | #include "bu/mutex.h" | ||
| 14 | |||
| 15 | namespace Bu | ||
| 16 | { | ||
| 17 | /** | ||
| 18 | * Ito condition. This is a fairly simple condition mechanism. As you may | ||
| 19 | * notice this class inherits from the Mutex class, this is because all | ||
| 20 | * conditions must be within a locked block. The standard usage of a | ||
| 21 | * condition is to pause one thread, perhaps indefinately, until another | ||
| 22 | * thread signals that it is alright to procede. | ||
| 23 | * <br> | ||
| 24 | * Standard usage for the thread that wants to wait is as follows: | ||
| 25 | * <pre> | ||
| 26 | * Condition cond; | ||
| 27 | * ... // Perform setup and enter your run loop | ||
| 28 | * cond.lock(); | ||
| 29 | * while( !isFinished() ) // Could be anything you're waiting for | ||
| 30 | * cond.wait(); | ||
| 31 | * ... // Take care of what you have to. | ||
| 32 | * cond.unlock(); | ||
| 33 | * </pre> | ||
| 34 | * The usage for the triggering thread is much simpler, when it needs to | ||
| 35 | * tell the others that it's time to grab some data it calls either signal | ||
| 36 | * or broadcast. See both of those functions for the difference. | ||
| 37 | *@ingroup Threading | ||
| 38 | */ | ||
| 39 | class Condition : public Mutex | ||
| 40 | { | ||
| 41 | public: | ||
| 42 | /** | ||
| 43 | * Create a condition. | ||
| 44 | */ | ||
| 45 | Condition(); | ||
| 46 | |||
| 47 | /** | ||
| 48 | * Destroy a condition. | ||
| 49 | */ | ||
| 50 | ~Condition(); | ||
| 51 | |||
| 52 | /** | ||
| 53 | * Wait forever, or until signalled. This has to be called from within | ||
| 54 | * a locked section, i.e. before calling this this object's lock | ||
| 55 | * function should be called. | ||
| 56 | */ | ||
| 57 | int wait(); | ||
| 58 | |||
| 59 | /** | ||
| 60 | * Wait for a maximum of nSec seconds and nUSec micro-seconds or until | ||
| 61 | * signalled. This is a little more friendly function if you want to | ||
| 62 | * perform other operations in the thrad loop that calls this function. | ||
| 63 | * Like the other wait function, this must be inside a locked section. | ||
| 64 | *@param nSec The seconds to wait. | ||
| 65 | *@param nUSec the micro-seconds to wait. | ||
| 66 | */ | ||
| 67 | int wait( int nSec, int nUSec ); | ||
| 68 | |||
| 69 | /** | ||
| 70 | * Notify the next thread waiting on this condition that they can go | ||
| 71 | * ahead. This only signals one thread, the next one in the condition | ||
| 72 | * queue, that it is safe to procede with whatever operation was being | ||
| 73 | * waited on. | ||
| 74 | */ | ||
| 75 | int signal(); | ||
| 76 | |||
| 77 | /** | ||
| 78 | * Notify all threads waiting on this condition that they can go ahead | ||
| 79 | * now. This function is slower than signal, but more effective in | ||
| 80 | * certain situations where you may not know how many threads should be | ||
| 81 | * activated. | ||
| 82 | */ | ||
| 83 | int broadcast(); | ||
| 84 | |||
| 85 | private: | ||
| 86 | pthread_cond_t cond; /**< Internal condition reference. */ | ||
| 87 | }; | ||
| 88 | } | ||
| 89 | |||
| 90 | #endif | ||
