Использование статической переменной, как в вашем примере, не позволит вам иметь более одного экземпляра, поэтому лучше избегать этого, если это возможно.И в вашем примере нет необходимости использовать его, вместо этого вы можете легко использовать локальную переменную.
Просто удалите static MainWindow *hWin;
из определения класса и измените MainWindow :: threadproc () для использования локальнойпеременная:
DWORD WINAPI MainWindow::threadproc(void* param)
{
MainWindow* const hWin = static_cast<MainWindow*>(param);
//hWin->whatever();
return 0;
}
Однако, если вы действительно хотите / должны использовать статическую переменную (по причинам, которые не очевидны в вашем примере), тогда я бы предложил установить ее в ctor MainWindow - итолько там.Нет необходимости явно передавать его в поток.
MainWindow::MainWindow()
{
assert(hWin == 0);
hWin = this;
}
MainWindow::~MainWindow()
{
assert(hWin == this);
hWin = 0;
}
void MainWindow::on_pushButton_clicked()
{
HANDLE hThread = CreateThread(0, 0, threadproc, 0, 0, 0);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
DWORD WINAPI MainWindow::threadproc(void*)
{
// just use hWin, it already points to the one and only MainWindow instance
return 0;
}