[C++ Builder]Wątek jako składowa klasy

0

Witam

Dlaczego nie mogę uruchomić wątka z funkcji składowej klasy?

class TKlasa
{
public:
       HANDLE Thread;
       DWORD ThreadID;
       void Watek_ON();
       DWORD WINAPI Watek(LPVOID);
};

DWORD WINAPI TKlasa::Watek(LPVOID)
{
  while(1)
  {
    //instrukcje
  }
}

void TKlasa::Watek_ON()
{
Thread = CreateThread(NULL, 0, Watek, NULL, 0, &ThreadID);
}

Kompilator wywala takie błędy:

[C++ Error] Unit1.cpp(33): E2034 Cannot convert 'unsigned long (__stdcall * (_closure )(void *))(void *)' to 'unsigned long (__stdcall *)(void *)'
[C++ Error] Unit1.cpp(33): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'void')

W klasie zamieściłem tylko niezbędne instrukcje, aby pokazać na czym polega problem.
Jak można sobie z tym poradzić?

0
#include <windows.h>

typedef DWORD WINAPI (*ThreadProc)(LPVOID);

class TKlasa
{
public:
       HANDLE Thread;
       DWORD ThreadID;
       void Watek_ON();
       static DWORD WINAPI WatekProc(TKlasa* Klasa);
       DWORD WINAPI Watek();
};

DWORD WINAPI TKlasa::Watek()
{
  while(1)
  {
    //instrukcje
  }
}

DWORD WINAPI TKlasa::WatekProc(TKlasa* Klasa)
{
   Klasa->Watek(); //zależy , czy potrzeba. Wcale nie musi być metody Watek(),
   //chyba, żeby miała być wirtualna
}


void TKlasa::Watek_ON()
{
Thread = CreateThread(NULL, 0, (ThreadProc) WatekProc, NULL, 0, &ThreadID);
}

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nFunsterStil)
{
   return 0;
}
0

Dzięki, wszystko jasne :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1