Я пытаюсь сохранить объект std::thread
внутри класса. учитываяХранение объекта std :: thread как члена класса
class GenericWindow
{
public:
void Create()
{
// ...
MessageLoopThread = std::thread(&GenericWindow::MessageLoop, *this);
}
private:
std::thread MessageLoopThread;
void GenericWindow::Destroy() // Called from the destructor
{
SendMessageW(m_hWnd, WM_DESTROY, NULL, NULL);
UnregisterClassW(m_ClassName.c_str(), m_WindowClass.hInstance);
MessageLoopThread.join();
}
void GenericWindow::MessageLoop()
{
MSG Msg;
while (GetMessageW(&Msg, NULL, 0, 0))
{
if (!IsDialogMessageW(m_hWnd, &Msg))
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
}
}; // LINE 66
Ошибки:
[Line 66] Error C2248: 'std::thread::thread' : cannot access private member declared in class 'std::thread'
сообщение Этой ошибки не помогает мне, я не пытаюсь получить доступ к любому частному члену std::thread
класса.
Что не так в моем коде? Как это исправить?
Может быть, что вы пытаетесь скопировать экземпляр 'GenericWindow'? 'std :: thread' может быть скопирован только с копированием. – juanchopanza
Не связано с вашим вопросом, но Win32-окна и многопоточность обычно не очень хорошо ладят. Графические интерфейсы однопоточные, если у вас нет оснований для реализации многопоточного графического интерфейса и не знаю, что вы делаете. – IInspectable