【发布时间】:2015-10-31 11:41:25
【问题描述】:
所以我正在阅读这个帖子:C++ How to store a parameter pack as a variable
答案并没有真正帮助我(我不确定如何实现它)
我要创建的是一个带有参数的 Thread 类,我目前的做法是,参数需要能够存储为成员,以便将它们传递给成员函数。
这是我当前的 Thread 类:(我希望所有 FuncArgs 都能够作为成员存储,因此可以将它们传递给 Run 中的成员函数)
template<class _Ty, typename...FuncArgs>
class YThread
{
private:
typedef YVoid(_Ty::* YMethod)();
HANDLE _myThread_handle;
DWORD _myThread_id;
_Ty* _myObject;
YMethod _myMethod;
private:
static YVoid Run(YPointer thread_obj)
{
YThread<_Ty>* thread = (YThread<_Ty>*)thread_obj;
thread->_myObject->*thread->_myMethod();
}
YThread(const YThread<_Ty>& Other) = delete;
YThread<_Ty>& operator=(const YThread<_Ty>& other) = delete;
public: // Starters
YThread()
{}
YThread(_Ty* object, YVoid(_Ty::* method)())
{
_myObject = object;
_myMethod = method;
Start();
}
~YThread()
{
if (_myThread_handle)
CloseHandle(_myThread_handle);
}
YBool Start()
{
_myThread_handle = CreateThread(
0, 0,
(LPTHREAD_START_ROUTINE)YThread<_Ty>::Run,
this,
0, &_myThread_id);
}
YBool Start(_Ty* object, YVoid(_Ty::* method)())
{
_myObject = object;
_myMethod = method;
Start();
}
public: // Other
YVoid Kill()
{
TerminateThread(_myThread_handle, 0);
}
YVoid Join()
{
WaitForSingleObject(_myThread_handle, INFINITE);
}
YBool is_alive()
{
DWORD exitCode = 0;
if (_myThread_handle)
GetExitCodeThread(_myThread_handle, &exitCode);
if (exitCode == STILL_ACTIVE)
return true;
return false;
}
};
【问题讨论】:
标签: c++ visual-c++