Есть API функция CreateThread в ней 3 параметром стоит указатель на автономную функцию потока. Хочу написать класс потока наподобие TThread такой, чтобы можно было в конструкторе обращаться к автономной С-функции CreateThread и подсунуть ей указатель на функцию класса. Пока компилятор отказывается, пишет:
[C++ Error] CreateThreadMain.cpp(34): E2034 Cannot convert 'unsigned long (__stdcall * (_closure )(void *))(void *)' to 'unsigned long (__stdcall *)(void *)'
[C++ Error] CreateThreadMain.cpp(34): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'unsigned long (__stdcall * (_closure )(void *))(void *)')
текст программы для прояснения вопроса следует ниже:
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
DWORD WINAPI ThreadFunc( LPVOID )
{
cout"Thread executed."endl;
return 0L;
}
class A
{
HANDLE hThread;
DWORD threadId;
public:
A();
DWORD WINAPI ThreadFuncA( LPVOID ) {return 0L;};// пока ничего не делаем
};
A::A()
{
this->hThread = ::CreateThread(NULL, NULL, &(this->ThreadFuncA), NULL, CREATE_SUSPENDED, &(this->threadId));// здесь ошибка
cout"object of type A created."endl;
};
int main(int argc, char* argv[])
{
DWORD threadId;
HANDLE hThread = ::CreateThread(NULL, NULL, &ThreadFunc, NULL, CREATE_SUSPENDED, &threadId);
if (hThread==NULL) {
cout"thread not created."endl;
return -1;
}
ResumeThread(hThread);
Sleep(1000);
A a;
cout"completed!"endl;
return 0;
}
//---------------------------------------------------------------------------
Может быть кто-нибудь подскажет как обойти ограничение?
С уважением,
Сергей Казаков.