Я делаю то же самое с процедурами thead Windows и другими различными обратными вызовами, и RTX все время прерывает. Единственная реальная ошибка состоит в том, что члены должны быть статичными (что вы уже поняли), и что вы должны убедиться, что ваша подпрограмма настроена на использование стандартного соглашения о вызовах системного вызова C /. К сожалению, то, как вы это делаете, зависит от платформы. В Win32 это с модификатором __stdcall.
Обратите внимание, что вы можете использовать параметр указателя passback-in для "преобразования" таких вызовов в обычные вызовы методов класса. Вот так («self_calling_callback» - статический метод):
unsigned long __stdcall basic_thread::self_calling_callback (void *parameter) {
if (parameter) {
basic_thread * thread = reinterpret_cast<basic_thread *>(parameter);
thread->action_callback();
}
return 0;
// The value returned only matters if someone starts calling GetExitCodeThread
// to retrieve it.
}
basic_thread::basic_thread () {
// Start thread.
m_Handle = CreateThread(NULL,
0,
self_calling_callback,
(PVOID)this,
0,
&m_ThreadId );
if( !IsHandleValid() )
throw StartException("CreateThread() failed", GetLastError());
}