Вызываю в нити pWhatever->UpdateData(false), — выбрасывает с ошибкой доступа к памяти...
pWhatever — указатель на мой диалог, в котором была создана нить. Кто сталкивался, — допоможите, плз...
Здравствуйте Corvin, Вы писали:
C>Вызываю в нити pWhatever->UpdateData(false), — выбрасывает с ошибкой доступа к памяти...
C>pWhatever — указатель на мой диалог, в котором была создана нить. Кто сталкивался, — допоможите, плз...
Из комментариев в MFC следует, что передавать между потоками классы MFC (как в твоем случае) нельзя:
// Note: if either of the above asserts fire and you are
// writing a multithreaded application, it is likely that
// you have passed a C++ object from one thread to another
// and have used that object in a way that was not intended.
// (only simple inline wrapper functions should be used)
//
// In general, CWnd objects should be passed by HWND from
// one thread to another. The receiving thread can wrap
// the HWND with a CWnd object by using CWnd::FromHandle.
//
// It is dangerous to pass C++ objects from one thread to
// another, unless the objects are designed to be used in
// such a manner.
Здравствуйте Corvin, Вы писали:
C>Вызываю в нити pWhatever->UpdateData(false), — выбрасывает с ошибкой доступа к памяти...
C>pWhatever — указатель на мой диалог, в котором была создана нить. Кто сталкивался, — допоможите, плз...
посмотри что делает UpdateData() в файле wincore.cpp:
/////////////////////////////////////////////////////////////////////////////
// 'dialog data' support
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?
CDataExchange dx(this, bSaveAndValidate);
// prevent control notifications from being dispatched during UpdateData
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse
pThreadState->m_hLockoutNotifyWindow = m_hWnd;
этот код предполагает что текущий thread это тот, в котором был создан диалог.
может быть Вашу проблему решит AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );
но правильней будет послать user defined сообщение этому диалогу