Files @ r9479:31c691398ec3
Branch filter:

Location: cpp/openttd-patchpack/source/src/thread.h - annotation

rubidium
(svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r9111:983de9c5a848
r6422:5983361e241a
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r9476:dfe3d556ae24
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r5475:3f5cd13d1b63
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r9476:dfe3d556ae24
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r5475:3f5cd13d1b63
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r9479:31c691398ec3
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r9476:dfe3d556ae24
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r8934:d5858392238b
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
/* $Id$ */

/** @file thread.h Base of all threads. */

#ifndef THREAD_H
#define THREAD_H

typedef void (*OTTDThreadFunc)(void *);

/**
 * A Thread Object which works on all our supported OSes.
 */
class ThreadObject {
public:
	/**
	 * Virtual destructor to allow 'delete' operator to work properly.
	 */
	virtual ~ThreadObject() {};

	/**
	 * Check if the thread is currently running.
	 * @return True if the thread is running.
	 */
	virtual bool IsRunning() = 0;

	/**
	 * Waits for the thread to exit.
	 * @return True if the thread has exited.
	 */
	virtual bool WaitForStop() = 0;

	/**
	 * Exit this thread.
	 */
	virtual bool Exit() = 0;

	/**
	 * Join this thread.
	 */
	virtual void Join() = 0;

	/**
	 * Check if this thread is the current active thread.
	 * @return True if it is the current active thread.
	 */
	virtual bool IsCurrent() = 0;

	/**
	 * Get the unique ID of this thread.
	 * @return A value unique to each thread.
	 */
	virtual uint GetId() = 0;

	/**
	 * Create a thread; proc will be called as first function inside the thread,
	 *  with optinal params.
	 * @param proc The procedure to call inside the thread.
	 * @param param The params to give with 'proc'.
	 * @return True if the thread was started correctly.
	 */
	static ThreadObject *New(OTTDThreadFunc proc, void *param);

	/**
	 * Convert the current thread to a new ThreadObject.
	 * @return A new ThreadObject with the current thread attached to it.
	 */
	static ThreadObject *AttachCurrent();

	/**
	 * Find the Id of the current running thread.
	 * @return The thread ID of the current active thread.
	 */
	static uint CurrentId();
};

/**
 * Cross-platform Thread Semaphore. Wait() waits for a Set() of someone else.
 */
class ThreadSemaphore {
public:
	static ThreadSemaphore *New();

	/**
	 * Virtual Destructor to avoid compiler warnings.
	 */
	virtual ~ThreadSemaphore() {};

	/**
	 * Signal all threads that are in Wait() to continue.
	 */
	virtual void Set() = 0;

	/**
	 * Wait until we are signaled by a call to Set().
	 */
	virtual void Wait() = 0;
};

#endif /* THREAD_H */