WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Document/View блин.

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Document/View блин.
ServerMouse опубликован 14-09-2001 18:20 MSK   Click Here to See the Profile for ServerMouse   Click Here to Email ServerMouse  
Ситуёвина такая. Хочу я связываться по сети с кем-то и лапсать оттуда небольшие данные в приложение типа сабж.
Организую класс моего сокета, и при OnNewDocument() создаю его, инициализирую, и передаю this в конструктор.

Получил я какие-то данные и делаю из класса сокетов pDoc->UpdateAllViews(NULL);

Всё, ексцепшин. Гдето в wincore.cpp(сорцы MFC). Почему? Ведь этаж ф-ция нормально работает если вызвать её из CSomeView.

ServerMouse опубликован 14-09-2001 18:34 MSK     Click Here to See the Profile for ServerMouse  Click Here to Email ServerMouse     
О! Круг сужается. Дело в том, что я для работы с сокетом создаю отдельную Thread. Ф-ция статическая, принадлежит этому же классу сокетов. И если точнее то я делаю так:

class CMySock
{
CMyDoc* pDoc;
CMySock(CMyDoc* _pDoc)
{pDoc=_pDoc;}
.........
SomeFun();
static DWORD WINAPI SockThread(LPVOID ts);
}

CMySock::SomeFun()
{
DWORD ThrID;
ThreadID=CreateThread (NULL,0,SockThread,this,NULL,&ThrID);
}

DWORD WINAPI CCafe::SockThread(LPVOID ts)
{
CCafe* MyClass=(CCafe*)ts;

ServerMouse опубликован 14-09-2001 18:37 MSK     Click Here to See the Profile for ServerMouse  Click Here to Email ServerMouse     
Блин случайно нажал. Так вот:
DWORD WINAPI CCafe::SockThread(LPVOID ts)
{
CMySock* MyClass=(CMySock*)ts;
......
WSAWaitForMultipleEvents(....)
...
MyClass->pDoc->UpdateAllViews(NULL)
....
}

Вот именно сдесь и вылазит exception....

Kosha опубликован 16-09-2001 13:12 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Сам с этой проблемой недели 2 муд@хался ;-)))
Дело в том, что при работе с несколькими thread винда, а точнее, MFC, теряет map окон, и ASSERT_VALID на окне валится, если вызван не из того thread, где оно было создано.

Сделай так: поставь USER мессагу, и шли какому-нить окну (например, MainFrame, а можно, в принципе, и CDocument, тока я не въехал, как ;-))) )
Передавай hwnd на нее в dwUser, шли через SendMessage, а в обработчике UpdateAllViews.
Работает как часы...
Тока надо осторожнее с CriticalSection'ами...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.