Thread.h
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*
  2.  *  OpenKore C++ Standard Library
  3.  *  Copyright (C) 2006  VCL
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Lesser General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Lesser General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Lesser General Public
  16.  *  License along with this library; if not, write to the Free Software
  17.  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18.  *  MA  02110-1301  USA
  19.  */
  20. #ifndef _OSL_THREAD_H_
  21. #define _OSL_THREAD_H_
  22. #include "../Object.h"
  23. #include "../Exception.h"
  24. #include "Runnable.h"
  25. namespace OSL {
  26. /**
  27.  * Thrown when unable to start a Thread.
  28.  *
  29.  * @class ThreadException OSL/Threading/Thread.h
  30.  * @ingroup Threading
  31.  */
  32. class ThreadException: public Exception {
  33. public:
  34. ThreadException(const char *msg = NULL, int code = 0);
  35. };
  36. /**
  37.  * A thread object.
  38.  *
  39.  * @class Thread OSL/Threading/Thread.h
  40.  * @ingroup Threading
  41.  */
  42. class Thread: public Runnable {
  43. private:
  44. Runnable *runnable;
  45. bool detached;
  46. void *impl;
  47. void init(bool detached);
  48. public:
  49. /**
  50.  * Create a new thread. The run() function of this Thread object will be run in the thread.
  51.  * See the Thread(Runnable *, bool) for general information.
  52.  *
  53.  * The thread is not actually started until you call start().
  54.  *
  55.  * @param detached  Whether this thread is created in detached mode.
  56.  */
  57. Thread(bool detached = false);
  58. /**
  59.  * Create a new thread.
  60.  *
  61.  * The <tt>runnable</tt> parameter is a Runnable object which contains the
  62.  * function to be executed in the thread. If <tt>runnable</tt> is NULL, then the
  63.  * <tt>run()</tt> function of this Thread object is run in the thread instead.
  64.  *
  65.  * If <tt>detached</tt> is set to true, the thread will be created in detached mode.
  66.  * Threads in non-detached mode must be <em>joined</em> later in the program (by calling
  67.  * <tt>thread->join()</tt> ). Threads in detached mode are "fire-and-forget", which do
  68.  * not have to be joined.
  69.  *
  70.  * In non-detached mode, <tt>runnable</tt> is freed when you destroy this Thread object.
  71.  * In detached <tt>runnable</tt> is freed when the thread terminates.
  72.  *
  73.  * The thread is not actually started until you call start().
  74.  *
  75.  * @param runnable  A Runnable object, which contains the function to be executed
  76.  *                  in the thread. This may also be NULL.
  77.  * @param detached  Whether this thread is created in detached mode.
  78.  */
  79. Thread(Runnable *runnable, bool detached = false);
  80. virtual ~Thread();
  81. /**
  82.  * Start this thread.
  83.  *
  84.  * @throws  ThreadException  If the thread cannot be started.
  85.  * @warning You may only call this function once.
  86.  */
  87. void start() throw(ThreadException);
  88. void interrupt();
  89. /**
  90.  * Join this thread. Wait until the thread has finished running, then free its resources.
  91.  * This method does not destroy this Thread object, so you still have to call <tt>delete</tt>.
  92.  *
  93.  * @post  The thread was not created in detached mode.
  94.  * @warning  You may only call this function once.
  95.  */
  96. void join();
  97. virtual void run();
  98. };
  99. }
  100. #endif /* _OSL_THREAD_H_ */