Я сталкиваюсь с многочисленными сбоями в приложении, которое является многопоточным.
Читая эти MSDN страницу , техническую заметку и в этой статье по TLS , я понял, что CWnd
объекты отображаются в HWND в локальном потоке Storgae (TLS, доступ к памяти которого зависит от потоков).
Я собирался отделить все, что похоже на CWnd поток-удаленный доступ, и преобразовать его в HWND
ссылки, а затем использовать ::PostMessage
в качестве порта связи.
Но один из моих коллег действительно настоял на том, чтобы я просто оставил CWnd*
в чужих потоках, принял политику ::PostMessage
в порядке, но использовал CWnd::GetSafeHwnd()
или pMyCWnd->m_hWnd
во внешних потоках, чтобы восстановить родной HWND
.
Я утверждал, что нигде Я видел, что GetSafeHwnd()
является потокобезопасным, и что объект CWnd
находится в TLS, его значение в другом потоке отличается.
Я не прав? В MSDN явно используется термин Неожиданные результаты .
Какова ваша точка зрения относительно вызова CWnd::GetSafehwnd()
или pMyCWnd->m_hWnd
во внешних потоках из потока создателя?
Есть ли у вас документация MSDN, в которой говорится, что это безопасно или нет.