Это мой последний вопрос .Я пытаюсь улучшить свой класс Тема.Конструктор получает указатель на функцию, которая должна выполняться в новом потоке.
class Thread {
public:
Thread(void (*p)()) {
pf=p;
}
~Thread () {}
void StartThread() {
hThread = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, NULL, 0, &threadID);
}
private:
void (*pf)();
HANDLE hThread;
unsigned threadID;
static unsigned WINAPI ThreadProc(LPVOID lpParam) {
(*pf)(); //error C2597 illegal reference to non-static member
return 0;
}
};
В ThreadProc мне нужно вызвать TimerFunc.
void TimerFunc () {
i++;
}
Пример использования этого класса:
Thread *timer;
timer = new Thread(TimerFunc);
timer->StartThread();
Так что это не работает.Пожалуйста, кто-нибудь, скажите мне, если этот класс глуп.Может быть, это плохая идея отправить указатель на func, который находится вне класса?Спасибо.
Большое спасибо за советы!Теперь это работает!
class Thread {
public:
Thread(void (*p)()) {
gg.pf=p;
}
~Thread ();
void StartThread() {
hThread = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, this, 0, &threadID);
}
private:
struct mm {
Thread *pThread;
void (*pf)();
} gg;
HANDLE hThread;
unsigned threadID;
static unsigned WINAPI ThreadProc(LPVOID lpParam) {
mm hh;
hh.pThread=static_cast<Thread*> (lpParam);
hh.pf=hh.pThread->gg.pf;
hh.pf();
return 0;
}
};
Как вы думаете?Это правильный выбор?