Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class MyCalc
{
private:
void *HandleThread;
unsigned long IdThread;
int tmp1;
char tmp2;
static DWORD WINAPI ThreadF(void *arg)
{
return ((MyCalc*)arg)->CalculationThread();
}
protected:
unsigned long CalculationThread()
{
/////////
}
public:
MyCalc(int indata1, char indata2)
{
HandleThread = CreateThread(NULL, 0, ThreadF, this, 0, &IdThread);
};
~MyCalc()
{
TerminateThread(HandleThread, NULL);
CloseHandle(HandleThread);
};
};
template<typename T>
struct tThrd
{
typedef DWORD(__thiscall T::* PMethod)();
static DWORD WINAPI Function(PVOID pParam)
{
return (((tThrd*)pParam)->pThis->*((tThrd*)pParam)->pMethod)();
};
T* pThis;
PMethod pMethod;
HANDLE Handle;
};
class MyCalc
{
public:
MyCalc()
{
// здесь нет никакой магии :)
MyThread.pThis = this;
MyThread.pMethod = &MyCalc::ThrdHandle;
MyThread.Handle = CreateThread(NULL, 0, MyThread.Function, &MyThread, 0, NULL);
}
~MyCalc()
{
WaitForSingleObject(MyThread.Handle, INFINITE);
CloseHandle(MyThread.Handle);
}
public:
DWORD ThrdHandle()
{
// что-то сумбурно и долго считаем
Sleep(10000);
return 1;
}
private:
tThrd<MyCalc> MyThread;
};
Многопоточные классы