mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-29 16:06:06 +00:00
82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
|
#ifndef NULLSOFT_MAINTHREADH
|
||
|
#define NULLSOFT_MAINTHREADH
|
||
|
#include <windows.h>
|
||
|
class Lambda
|
||
|
{
|
||
|
public:
|
||
|
virtual void Run() = 0;
|
||
|
};
|
||
|
|
||
|
template <class func_t, class param_t>
|
||
|
class LambdaC : public Lambda
|
||
|
{
|
||
|
public:
|
||
|
LambdaC(func_t _func, param_t _param)
|
||
|
: func(_func), param(_param)
|
||
|
{
|
||
|
event = CreateEvent(0, FALSE, FALSE, 0);
|
||
|
}
|
||
|
~LambdaC()
|
||
|
{
|
||
|
CloseHandle(event);
|
||
|
}
|
||
|
void Run()
|
||
|
{
|
||
|
func(param);
|
||
|
SetEvent(event);
|
||
|
}
|
||
|
private:
|
||
|
HANDLE event;
|
||
|
func_t func;
|
||
|
param_t param;
|
||
|
};
|
||
|
|
||
|
template <class object_t, class func_t, class param_t>
|
||
|
class LambdaCPP
|
||
|
{
|
||
|
public:
|
||
|
LambdaCPP(object_t *_object, func_t *_func, param_t _param)
|
||
|
: func(_func), param(_param)
|
||
|
{
|
||
|
event = CreateEvent(0, FALSE, FALSE, 0);
|
||
|
}
|
||
|
~LambdaCPP()
|
||
|
{
|
||
|
CloseHandle(event);
|
||
|
}
|
||
|
void Run()
|
||
|
{
|
||
|
object->*func(param);
|
||
|
SetEvent(event);
|
||
|
}
|
||
|
private:
|
||
|
HANDLE event;
|
||
|
object_t *object;
|
||
|
func_t *func;
|
||
|
param_t param;
|
||
|
};
|
||
|
|
||
|
class MainThread
|
||
|
{
|
||
|
public:
|
||
|
MainThread();
|
||
|
template <class func_t, class param_t>
|
||
|
void Run(func_t *func, param_t param)
|
||
|
{
|
||
|
Lambda *lambda = new LambdaC(func, param);
|
||
|
PostMessage(mainWindow, WM_USER, lambda, 0);
|
||
|
}
|
||
|
|
||
|
template <class object_t, class func_t, class param_t>
|
||
|
void Run(object_t *object, func_t *func, param_t param)
|
||
|
{
|
||
|
Lambda *lambda = new LambdaCPP(object, func, param);
|
||
|
PostMessage(mainWindow, WM_USER, lambda, 0);
|
||
|
}
|
||
|
private:
|
||
|
HWND mainWindow;
|
||
|
};
|
||
|
|
||
|
extern MainThread mainThread;
|
||
|
|
||
|
#endif
|