Функции создания потоков не знают классов C ++;поэтому точка входа в ваш поток должна быть либо статической функцией-членом класса, либо функцией, не являющейся членом.Вы можете передать указатель this
в качестве параметра lpvThreadParam
в функцию CreateThread()
, а затем использовать статическую функцию или функцию точки входа, не являющуюся членом, просто вызвать функцию threadfn()
через этот указатель.Если threadfn()
функция является статической, убедитесь, что вы поставили &
перед C1::threadfn
.
Вот простой пример:
class MyClass {
private:
static DWORD WINAPI trampoline(LPVOID pSelf);
DWORD threadBody();
public:
HANDLE startThread();
}
DWORD WINAPI MyClass::trampoline(LPVOID pSelf) {
return ((MyClass)pSelf)->threadBody();
}
DWORD MyClass::threadBody() {
// Do the actual work here
}
HANDLE MyClass::startThread() {
return CreateThread(NULL, 0, &MyClass::trampoline, (LPVOID)this, 0, NULL);
}