aboutsummaryrefslogtreecommitdiff
path: root/dep/include/zthread/Thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'dep/include/zthread/Thread.h')
-rw-r--r--dep/include/zthread/Thread.h382
1 files changed, 0 insertions, 382 deletions
diff --git a/dep/include/zthread/Thread.h b/dep/include/zthread/Thread.h
deleted file mode 100644
index 90a318ecfff..00000000000
--- a/dep/include/zthread/Thread.h
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (c) 2005, Eric Crahen
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is furnished
- * to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef __ZTTHREAD_H__
-#define __ZTTHREAD_H__
-
-#include "zthread/Cancelable.h"
-#include "zthread/Priority.h"
-#include "zthread/NonCopyable.h"
-#include "zthread/Task.h"
-#include "zthread/Waitable.h"
-
-namespace ZThread {
-
- class ThreadImpl;
-
- /**
- * @class Thread
- * @author Eric Crahen <http://www.code-foo.com>
- * @date <2003-07-27T11:17:59-0400>
- * @version 2.3.0
- *
- *
- * @see Task
- * @see Executor
- *
- * <h2>Examples</h2>
- * - <a href="#ex1">Launching a task</a>
- * - <a href="#ex2">Waiting for a task</a>
- * - <a href="#ex3">Sharing a task</a>
- *
- * <h2><a name="ex1">Launching a task</a></h2>
- *
- * A thread is started simply by constructing a thread object and giving
- * it a task to perform. The thread will continue to run its task, even
- * after the Thread object used to launch the thread has gone out of scope.
- *
- * @code
- * #include "zthread/Thread.h"
- * #include <iostream>
- *
- * using namespace ZThread;
- *
- * class aRunnable : public Runnable {
- *
- * void run() {
- *
- * Thread::sleep(1000);
- * std::cout << "Hello from another thread" << std::endl;
- *
- * }
- *
- * };
- *
- * int main() {
- *
- * try {
- *
- * // Implictly constructs a Task
- * Thread t(new aRunnable);
- *
- * } catch(Synchronization_Exception& e) {
- * std::cerr << e.what() << std::endl;
- * }
- *
- * std::cout << "Hello from the main thread" << std::endl;
- *
- * // Output:
- *
- * // Hello from the main thread
- * // Hello from another thread
- *
- * return 0;
- *
- * }
- *
- * @endcode
- *
- * <h2><a name="ex2">Waiting for a task</a></h2>
- *
- * A user can exercise some simple synchronization by waiting for a thread
- * to complete running its task.
- *
- * @code
- * #include "zthread/Thread.h"
- * #include <iostream>
- *
- * using namespace ZThread;
- *
- * class aRunnable : public Runnable {
- * public:
- *
- * void run() {
- *
- * Thread::sleep(1000);
- * std::cout << "Hello from another thread" << std::endl;
- *
- * }
- *
- * };
- *
- * int main() {
- *
- * try {
- *
- * // Implictly constructs a Task
- * Thread t(new aRunnable);
- * t.wait();
- *
- * } catch(Synchronization_Exception& e) {
- * std::cerr << e.what() << std::endl;
- * }
- *
- * std::cout << "Hello from the main thread" << std::endl;
- *
- * // Output:
- *
- * // Hello from another thread
- * // Hello from the main thread
- *
- * return 0;
- *
- * }
- *
- * @endcode
- *
- * <h2><a name="ex3">Sharing a task</a></h2>
- *
- * The same task can be shared by more than one thread. A Task is constructed
- * from a Runnable, and that Task object is copied by value and handed off to
- * each thread.
- *
- * @code
- * #include "zthread/Thread.h"
- * #include <iostream>
- *
- * using namespace ZThread;
- *
- * class aRunnable : public Runnable {
- *
- * void run() {
- *
- * Thread::sleep(1000);
- * std::cout << "Hello from another thread" << std::endl;
- *
- * }
- *
- * };
- *
- * int main() {
- *
- * try {
- *
- * // Explictly constructs a Task
- * Task task(new aRunnable);
- *
- * // Two threads created to run the same Task
- * Thread t1(task);
- * Thread t2(task);
- *
- * } catch(Synchronization_Exception& e) {
- * std::cerr << e.what() << std::endl;
- * }
- *
- * std::cout << "Hello from the main thread" << std::endl;
- *
- * // Output:
- *
- * // Hello from the main thread
- * // Hello from another thread
- * // Hello from another thread
- *
- * return 0;
- *
- * }
- *
- * @endcode
- */
- class ZTHREAD_API Thread
- : public Cancelable, public Waitable, public NonCopyable {
-
- //! Delegate
- ThreadImpl* _impl;
-
- public:
-
- /**
- * Create a Thread that represents the current thread.
- * <em>Using the static members of Thread should be preferred over using this constructor</em>
- */
- Thread();
-
- /**
- * Create a Thread that spawns a new thread to run the given task.
- *
- * @param task Task to be run by a thread managed by this executor
- * @param autoCancel flag to requestion automatic cancellation
- *
- * @post if the <i>autoCancel</i> flag was true, this thread will
- * automatically be canceled when main() goes out of scope.
- */
- Thread(const Task&, bool autoCancel = false);
-
- //! Destroy the Thread
- ~Thread();
-
- //! Comparison operator
- bool operator==(const Thread& t) const;
-
- //! Comparison operator
- inline bool operator!=(const Thread& t) const {
- return !(*this == t);
- }
-
- /**
- * Wait for the thread represented by this object to complete its task.
- * The calling thread is blocked until the thread represented by this
- * object exits.
- *
- * @exception Deadlock_Exception thrown if thread attempts to join itself
- * @exception InvalidOp_Exception thrown if the thread cannot be joined
- * @exception Interrupted_Exception thrown if the joining thread has been interrupt()ed
- */
- void wait();
-
- /**
- * Wait for the thread represented by this object to complete its task.
- * The calling thread is blocked until the thread represented by this
- * object exits, or until the timeout expires.
- *
- * @param timeout maximum amount of time (milliseconds) this method
- * could block the calling thread.
- *
- * @return
- * - <em>true</em> if the thread task complete before <i>timeout</i>
- * milliseconds elapse.
- * - <em>false</em> othewise.
- *
- * @exception Deadlock_Exception thrown if thread attempts to join itself
- * @exception InvalidOp_Exception thrown if the thread cannot be joined
- * @exception Interrupted_Exception thrown if the joining thread has been interrupt()ed
- */
- bool wait(unsigned long timeout);
-
- /**
- * Change the priority of this Thread. This will change the actual
- * priority of the thread when the OS supports it.
- *
- * If there is no real priority support, it's simulated.
- *
- * @param p - new Priority
- */
- void setPriority(Priority p);
-
- /**
- * Get the priority of this Thread.
- *
- * @return Priority
- */
- Priority getPriority();
-
- /**
- * Interrupts this thread, setting the <i>interrupted</i> status of the thread.
- * This status is cleared by one of three methods.
- *
- * If this thread is blocked when this method is called, the thread will
- * abort that blocking operation with an Interrupted_Exception.
- *
- * - The first is by attempting an operation on a synchronization object that
- * would normally block the calling thread; Instead of blocking the calling
- * the calling thread, the function that would normally block will thrown an
- * Interrupted_Exception and clear the <i>interrupted</i> status of the thread.
- *
- * - The second is by calling Thread::interrupted().
- *
- * - The third is by calling Thread::canceled().
- *
- * Threads already blocked by an operation on a synchronization object will abort
- * that operation with an Interrupted_Exception, clearing the threads <i>interrupted</i>
- * status as in the first case described above.
- *
- * Interrupting a thread that is no longer running will have no effect.
- *
- * @return
- * - <em>true</em> if the thread was interrupted while not blocked by a wait
- * on a synchronization object.
- * - <em>false</em> othewise.
- */
- bool interrupt();
-
- /**
- * Tests whether the current Thread has been interrupt()ed, clearing
- * its interruption status.
- *
- * @return
- * - <em>true</em> if the Thread was interrupted.
- * - <em>false</em> otherwise.
- *
- * @post The <i>interrupted</i> status of the current thread will be cleared,
- * allowing it to perform a blocking operation on a synchronization
- * object without throwing an exception.
- */
- static bool interrupted();
-
- /**
- * Tests whether the current Thread has been canceled, and clears the
- * interrupted status.
- *
- * @return bool true only if the Thread::cancel() has been invoked.
- */
- static bool canceled();
-
- /**
- * Tests whether this thread has been canceled. If called from the context
- * of this thread, the interrupted status is cleared.
- *
- * @return
- * - <em>true</em> if the Thread was canceled.
- * - <em>false</em> otherwise.
- *
- * @see Cancelable::isCanceled()
- */
- virtual bool isCanceled();
-
- /**
- * Interrupt and cancel this thread in a single operation. The thread will
- * return <em>true</em> whenever its cancelation status is tested in the future.
- *
- * @exception InvalidOp_Exception thrown if a thread attempts to cancel itself
- *
- * @see Thread::interrupt()
- * @see Cancelable::cancel()
- */
- virtual void cancel();
-
- /**
- * Put the currently executing thread to sleep for a given amount of
- * time.
- *
- * @param timeout maximum amount of time (milliseconds) this method could block
- *
- * @exception Interrupted_Exception thrown if the threads sleep is interrupted
- * before <i>timeout</i> milliseconds expire.
- */
- static void sleep(unsigned long timeout);
-
- /**
- * Cause the currently executing thread to yield, allowing the scheduler
- * to assign some execution time to another thread.
- */
- static void yield();
-
-
- }; /* Thread */
-
-
-} // namespace ZThread
-
-#endif // __ZTTHREAD_H__
-
-
-
-