Вы можете обернуть их вместе в структуру и передать указатель на эту структуру. Будьте осторожны, потому что эта структура должна , а не быть объявлена локально для конструктора Backgrounder
- это может привести к неопределенному поведению, потому что поток все еще может быть запущен после завершения функции, которая запустила его. Он должен быть либо динамически размещен, либо static
член класса, либо глобальной переменной.
На самом деле, я бы пропустил указатель this
, так как вы по сути хотите иметь возможность доступа к полям объекта в функции Run
:
class Backgrounder{
public:
MESSAGE_QUEUE* m_pMsgQueue;
LockSection* m_pLc;
static void __cdecl Run (void *pThis) {
MESSAGE_QUEUE* s_pMsgQueue = ((Backgrounder *) pThis)->m_pMsgQueue;
LockSection* s_pLc = ((Backgrounder *) pThis)->m_pLc;
}
Backgrounder(MESSAGE_QUEUE* pMsgQueue,LockSection* pLc) {
m_pMsgQueue = pMsgQueue;
m_pLc = pLc;
_beginthread(Run, 0, (void *) this);
}
~Backgrounder(){ }
};
Конечно, вам необходимо убедиться, что вновь созданный объект Backgrounder
не был преждевременно разрушен, то есть поток должен быть завершен до уничтожения.
Кроме того, если позже эти поля будут изменены из родительского потока, вам необходимо использовать соответствующие механизмы синхронизации.