thread/Thread: use BoundMethod

This commit is contained in:
Max Kellermann
2017-02-10 22:41:11 +01:00
parent 752ff12c37
commit 8649ea3d6f
18 changed files with 99 additions and 120 deletions

View File

@@ -25,14 +25,11 @@
#include "java/Global.hxx"
#endif
bool
Thread::Start(void (*_f)(void *ctx), void *_ctx)
void
Thread::Start()
{
assert(!IsDefined());
f = _f;
ctx = _ctx;
#ifdef _WIN32
handle = ::CreateThread(nullptr, 0, ThreadProc, this, 0, &id);
if (handle == nullptr)
@@ -56,8 +53,6 @@ Thread::Start(void (*_f)(void *ctx), void *_ctx)
creating = false;
#endif
#endif
return true;
}
void
@@ -89,7 +84,7 @@ Thread::Run()
#endif
#endif
f(ctx);
f();
#ifdef ANDROID
Java::DetachCurrentThread();

View File

@@ -21,6 +21,7 @@
#define MPD_THREAD_HXX
#include "check.h"
#include "util/BindMethod.hxx"
#include "Compiler.h"
#ifdef _WIN32
@@ -32,6 +33,9 @@
#include <assert.h>
class Thread {
typedef BoundMethod<void()> Function;
const Function f;
#ifdef _WIN32
HANDLE handle = nullptr;
DWORD id;
@@ -49,11 +53,8 @@ class Thread {
#endif
#endif
void (*f)(void *ctx);
void *ctx;
public:
Thread() = default;
explicit Thread(Function _f):f(_f) {}
Thread(const Thread &) = delete;
@@ -89,7 +90,7 @@ public:
#endif
}
bool Start(void (*f)(void *ctx), void *ctx);
void Start();
void Join();
private: