(svn r13412) -Add: OTTDThreadTerminateFunc, for all thread systems, which is called when a thread is terminated. Now GenWorld- and SaveLoad-thread cleanup theirselves correctly, while Fibers don't (as that causes access-violations)

This commit is contained in:
truebrain
2008-06-08 12:06:27 +00:00
parent 96d7f87cc9
commit b95042b05c
9 changed files with 44 additions and 27 deletions

View File

@@ -6,6 +6,7 @@
#define THREAD_H
typedef void (*OTTDThreadFunc)(void *);
typedef void (*OTTDThreadTerminateFunc)(class ThreadObject *self);
/**
* A Thread Object which works on all our supported OSes.
@@ -56,9 +57,10 @@ public:
* with optinal params.
* @param proc The procedure to call inside the thread.
* @param param The params to give with 'proc'.
* @param terminate_func The function (or NULL) to call when the thread terminates.
* @return True if the thread was started correctly.
*/
static ThreadObject *New(OTTDThreadFunc proc, void *param);
static ThreadObject *New(OTTDThreadFunc proc, void *param, OTTDThreadTerminateFunc terminate_func);
/**
* Convert the current thread to a new ThreadObject.
@@ -71,6 +73,12 @@ public:
* @return The thread ID of the current active thread.
*/
static uint CurrentId();
/**
* A OTTDThreadTerminateFunc, which cleans up the thread itself
* at termination of the thread (so it becomes self-managed).
*/
static void TerminateCleanup(ThreadObject *self) { delete self; }
};
/**