PDA

Zobacz pełną wersję : MFC - Gniazda, Wątki



macol
06-03-08, 20:00
Stworzyłem klasę dziedziczącą po CWinThread, w której miedzy innymi stworzyłem


BOOL mserwer::CreateThread(CSocket* test);Wątek tworze tak:


ttt = new mserwer;
ttt->CreateThread(&CSock_serwer);mserwer to nazwa mojej klasy dziedziczącej po CWinThread.

W tym wątku wykonuje pewne operacje kończąc na wywołaniu test.Accept(). Tu wątek stoi i oczekuje na połączenie/a.

W pewnym momencie użytkownik zamyka watek 'matkę'. Trzeba by zamknąć socket w utworzonym wątku przez test.Close().

Probuje to robić w
int mserwer::ExitInstance()
niestety, nim dojdzie do test.close();
to wywala błąd w lini 389
ASSERT(pState->m_hSocketWindow != NULL);w pliku sockcore.cpp

Jak zamknąć socket w tym wątku w momencie gdy użytkownik zamyka wątek glowny? Bądź ewentualnie jak to wszystko("serwer oczekujący na połączenia działający w tle aplikacji, gdy deklaracja socketu jest w wątku 'głównym'") zrobić inaczej?

Google przeszukane, msdn też, ja nic nie znajduje - pewnie wiąże się z moim brakiem zrozumienia MFC.

macol
08-03-08, 18:34
Myślę ze sobie poradziłem. Porzucić zautomatyzowane CSocket, zacząc korzystać w CAsyncsocket, przed kolejnymi wywołaniami metody akcept() sprawdzać czy przypadkiem wątek niema zostać zamknięty. Chyba. Jak wyjdzie w praktyce, sprawdzę pewnie dopiero w przyszły weekend.