//This is AsynchronousFunction class header file
typedef int (*functionCall)(int, int);
DWORD __stdcall functionExecuter(LPVOID pContext); // global function
class AsynchronousFunction
{
int param1, param2;
functionCall fCall;
HANDLE m_handle;
public:
AsynchronousFunction(functionCall, int, int);
~AsynchronousFunction();
int result();
protected:
private:
int returnVal;
};
It's implementation as follows
AsynchronousFunction::AsynchronousFunction(functionCall fCall, int param1, int param2):m_handle(CreateEvent(NULL , false , false , NULL))
{
bool b = QueueUserWorkItem(functionExecuter, this, WT_EXECUTEDEFAULT);
WaitForSingleObject(m_handle, INFINITE);
SetEvent(m_handle);
}
AsynchronousFunction::~AsynchronousFunction()
{
CloseHandle(m_handle);
}
int AsynchronousFunction::result()
{
return 0;// not implemented yet
}
DWORD __stdcall functionExecuter(LPVOID pContext)
{
return 0;
}
здесь pContext получает «этот» указатель. моя попытка - получить param1 и param2
отсюда и сделать работу как я могу это сделать?Как передать «этот» указатель на глобальную функцию
Я лично предпочитаю избегать друзей, если это абсолютно необходимо, и даже тогда, чтобы догадаться и посмотреть, есть ли другой способ. Поэтому я предпочел бы, чтобы последний подход был первым. Кажется, это тоже чисто. – jia103
@ jia103 Я согласен с тобой. Второй вариант выглядит более чистым. Я тоже лично избегаю функций друга –
Спасибо. Я понял. поскольку pContext - это указатель на void, его нужно перевести в тип AsynchronousFunction. – Zarco