Создать поток внутри DLL

Я работаю над профилировщиком .NET, который я пишу на c ++ (DLL, которая использует ATL). Я хочу создать поток, который пишет в файл каждые 30 секунд. Я хочу, чтобы функция потока была методом одного из моих классов

DWORD WINAPI CProfiler::MyThreadFunction( void* pContext )
{
//Instructions that manipulate attributes from my class;
}

когда я пытаюсь начать поток

HANDLE l_handle = CreateThread( NULL, 0, MyThreadFunction, NULL, 0L, NULL );

Я получил эту ошибку:

argument of type "DWORD (__stdcall CProfiler::*)(void *pContext)"is incompatible with parameter of type "LPTHREAD_START_ROUTINE"

Как правильно создать поток внутри DLL?
Любая помощь будет оценена.

5

Решение

Вы не можете передать указатель на функцию-член, как если бы это был обычный указатель на функцию. Вы должны объявить вашу функцию-член как статическую. Если вам нужно вызвать функцию-член для объекта, вы можете использовать прокси-функцию.

struct Foo
{
virtual int Function();

static DWORD WINAPI MyThreadFunction( void* pContext )
{
Foo *foo = static_cast<Foo*>(pContext);

return foo->Function();
}
};Foo *foo = new Foo();

// call Foo::MyThreadFunction to start the thread
// Pass `foo` as the startup parameter of the thread function
CreateThread( NULL, 0, Foo::MyThreadFunction, foo, 0L, NULL );
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]