Files
TrinityCore/dep/include/g3dlite/G3D/ThreadSet.h
click e777161888 HIGHLY EXPERIMENTAL - USE AT YOUR OWN RISK
Implement the use of the new vmap3-format by Lynx3d (mad props to you for this, and thanks for the talks earlier)
+ reduced Vmap size to less than one third, and improve precision
+ indoor/outdoor check which allows automatic unmounting of players
+ additional area information from WMOAreaTable.dbc, removed existing "hacks"
+ WMO liquid information for swimming and fishing correctly in buildings/cities/caves/instances (lava and slime WILL hurt from now on!)
- buildfiles for windows are not properly done, and will need to be sorted out
NOTE: Do NOT annoy Lynx3d about this, any issues with this "port" is entirely our fault !
THIS REVISION IS CONSIDERED UNSTABLE AND CONTAINS WORK IN PROGRESS - USE AT YOUR OWN RISK!

--HG--
branch : trunk
2010-06-05 00:59:25 +02:00

88 lines
2.5 KiB
C++

#ifndef G3D_THREADSET_H
#define G3D_THREADSET_H
#include "G3D/platform.h"
#include "G3D/Array.h"
#include "G3D/ReferenceCount.h"
#include "G3D/GThread.h"
#include "G3D/GMutex.h"
namespace G3D {
/** Manages a set of threads. All methods are threadsafe except for
the iterator begin/end.
@beta*/
class ThreadSet : public ReferenceCountedObject {
public:
/** Intended to allow future use with a template parameter.*/
typedef GThread Thread;
typedef ReferenceCountedPointer<Thread> ThreadRef;
typedef ReferenceCountedPointer<ThreadSet> Ref;
typedef Array<ThreadRef>::Iterator Iterator;
typedef Array<ThreadRef>::ConstIterator ConstIterator;
private:
/** Protects m_thread */
GMutex m_lock;
/** Threads in the set */
Array<ThreadRef> m_thread;
public:
/** Total number of threads (some of which may be completed). */
int size() const;
/** Number of threads that have been started */
int numStarted() const;
/** Start all threads that are not currently started.
@param lastThreadBehavior If USE_CURRENT_THREAD, takes the last unstarted thread and executes it manually on
the current thread. This helps to take full advantage of the machine when
running a large number of jobs and avoids the overhead of a thread start for single-thread groups.
Note that this forces start() to block until
that thread is complete.
*/
void start(GThread::SpawnBehavior lastThreadBehavior = GThread::USE_NEW_THREAD) const;
/** Terminate all threads that are currently started */
void terminate() const;
/** Waits until all started threads have completed. */
void waitForCompletion() const;
/** Remove all (not stopping them) */
void clear();
/** Removes completed threads and returns the new size.*/
int removeCompleted();
/** Inserts a new thread, if it is not already present, and
returns the new number of threads.*/
int insert(const ThreadRef& t);
/** Removes a thread. Returns true if the thread was present and
removed. */
bool remove(const ThreadRef& t);
bool contains(const ThreadRef& t) const;
/** It is an error to mutate the ThreadSet while iterating through it. */
Iterator begin();
Iterator end();
ConstIterator begin() const;
ConstIterator end() const;
};
} // namespace G3D
#endif