Mdi пРИЛОЖЕНИЕ, пОТОК пОДГОТАВЛИВАЮЩИЙ дАННЫЕ дЛЯ дОКУМЕНТА и зАКРЫТИЕ дОКУМЕНТА
CCriticalSection cs;
UINT SomeThread(LPVOID param)
{
.....
cs.Lock(); // без этого похоже происходит переполнение очереди сообщений если открыто много документов
while ( 0 ==
::SendMessageTimeout(AfxGetMainWnd()->GetSafeHwnd(),WM_MY_CUSTOM_MESSAGE,WPARAM(pDoc),0,SMTO_ABORTIFHUNG|SMTO_BLOCK, 1000,0 ) )
)
{
// проверка на завершение работы потока в случае закрытия документа (cs.UnLock(); return 0) иначе продолжение цикла(пытаемся отослать опять)
}
cs.UnLock();
.....
return 0;
}
LRESULT CMainFrame::OnSomeMessHandler(UINT wParam, LONG lParam)
{
CMyDoc* pDoc = (CMyDoc*)wParam;
pDoc->OnNewDataReady();
return 0;
}
Все работает, НО проблема в том что при закрытии документа(одного из многих и не каждый раз!) приложение зависает. т.е. поток не может дождаться отправки сообщения и крутится в цикле отправки(причем хендл окна не меняется), а окно не принимает никакого сообщения(игнорирует все). Такое впечатление что оно ждет определенного(хотя не понятно почему не может дождаться потоки то разные) и отказывается принимать остальные. Самое интересное то что без критической секции все почти работает(по крайней мере не виснет), но похоже происходит переполнение очереди сообщений так как некоторые окна(к которым давно обращались перестают перерисовываться и приложение не реагирует на другие события как клик мыши например)
В чем дело, че делать?
Заранее благодарен за оказанное внимание и напряг мозгов.