aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Thread')
-rw-r--r--src/libjin/Thread/Thread.cpp14
-rw-r--r--src/libjin/Thread/Thread.h8
-rw-r--r--src/libjin/Thread/thread.cpp14
-rw-r--r--src/libjin/Thread/thread.h8
4 files changed, 12 insertions, 32 deletions
diff --git a/src/libjin/Thread/Thread.cpp b/src/libjin/Thread/Thread.cpp
index 2be44a1..13e691a 100644
--- a/src/libjin/Thread/Thread.cpp
+++ b/src/libjin/Thread/Thread.cpp
@@ -171,14 +171,6 @@ namespace thread
//////////////////////////////////////////////////////////////////////
- int Thread::ThreadFunciton(void* p)
- {
- Thread* thread = (Thread*)p;
- if (thread->threadRunner != nullptr)
- thread->threadRunner(thread);
- return 0;
- }
-
Thread::Thread(const std::string tname, ThreadRunner runner)
: name(tname)
, running(false)
@@ -207,7 +199,7 @@ namespace thread
return running;
};
- bool Thread::start()
+ bool Thread::start(void* p)
{
Lock l(mutex);
if (running)
@@ -219,8 +211,8 @@ namespace thread
#endif
}
#if JIN_THREAD_SDL
- handle = SDL_CreateThread(ThreadFunciton, name.c_str(), this);
- #elif JIN_THREAD_CPP
+ handle = SDL_CreateThread(threadRunner, name.c_str(), p);
+ #elif JIN_THREAD_CPP
handle = new std::thread();
#endif
return (running = (handle != nullptr));
diff --git a/src/libjin/Thread/Thread.h b/src/libjin/Thread/Thread.h
index 5b74f23..046c8f6 100644
--- a/src/libjin/Thread/Thread.h
+++ b/src/libjin/Thread/Thread.h
@@ -97,10 +97,10 @@ namespace thread
};
public:
- typedef void(ThreadRunner)(Thread* thread);
+ typedef int(*ThreadRunner)(void* obj);
Thread(const std::string name, ThreadRunner threadfuncs);
~Thread();
- bool start();
+ bool start(void* p);
void wait();
void send(int slot, const Variant& value);
bool receive(int slot);
@@ -120,7 +120,7 @@ namespace thread
#endif
Mutex* mutex; // mutex variable
Conditional* condition; // condition variable
- ThreadRunner* threadRunner; // thread function
+ ThreadRunner threadRunner; // thread function
ThreadData* common; // threads common data
const std::string name; // thread name, for debugging purposes
/**
@@ -154,8 +154,6 @@ namespace thread
*/
bool running; // running
- static int ThreadFunciton(void* p);
-
};
} // thread
diff --git a/src/libjin/Thread/thread.cpp b/src/libjin/Thread/thread.cpp
index 2be44a1..13e691a 100644
--- a/src/libjin/Thread/thread.cpp
+++ b/src/libjin/Thread/thread.cpp
@@ -171,14 +171,6 @@ namespace thread
//////////////////////////////////////////////////////////////////////
- int Thread::ThreadFunciton(void* p)
- {
- Thread* thread = (Thread*)p;
- if (thread->threadRunner != nullptr)
- thread->threadRunner(thread);
- return 0;
- }
-
Thread::Thread(const std::string tname, ThreadRunner runner)
: name(tname)
, running(false)
@@ -207,7 +199,7 @@ namespace thread
return running;
};
- bool Thread::start()
+ bool Thread::start(void* p)
{
Lock l(mutex);
if (running)
@@ -219,8 +211,8 @@ namespace thread
#endif
}
#if JIN_THREAD_SDL
- handle = SDL_CreateThread(ThreadFunciton, name.c_str(), this);
- #elif JIN_THREAD_CPP
+ handle = SDL_CreateThread(threadRunner, name.c_str(), p);
+ #elif JIN_THREAD_CPP
handle = new std::thread();
#endif
return (running = (handle != nullptr));
diff --git a/src/libjin/Thread/thread.h b/src/libjin/Thread/thread.h
index 5b74f23..046c8f6 100644
--- a/src/libjin/Thread/thread.h
+++ b/src/libjin/Thread/thread.h
@@ -97,10 +97,10 @@ namespace thread
};
public:
- typedef void(ThreadRunner)(Thread* thread);
+ typedef int(*ThreadRunner)(void* obj);
Thread(const std::string name, ThreadRunner threadfuncs);
~Thread();
- bool start();
+ bool start(void* p);
void wait();
void send(int slot, const Variant& value);
bool receive(int slot);
@@ -120,7 +120,7 @@ namespace thread
#endif
Mutex* mutex; // mutex variable
Conditional* condition; // condition variable
- ThreadRunner* threadRunner; // thread function
+ ThreadRunner threadRunner; // thread function
ThreadData* common; // threads common data
const std::string name; // thread name, for debugging purposes
/**
@@ -154,8 +154,6 @@ namespace thread
*/
bool running; // running
- static int ThreadFunciton(void* p);
-
};
} // thread