[mfc (w zasadzie nie tylko)] gniazda i watki

0

Kolejne moje pytanie o mfc. Tym razem o watki.
Wiec jest tak:
W serwerze tworze watek ktory nasluchuje na zgloszenia klientow (logowanie). To mi dziala. TO jest watek z intefrejsem uzytkownika (klasa wyprowadzona z CWinThread).
Metoda tej klasy ktora nasluchuje (zrobilem to w InitInstace()) wyglada tak:

if (!hosts.Create(4000)){
	return false;
}
if (!hosts.Listen()){
	return false;
}
CMySocket *soc; // klasa wyprowadzona z CSocket, z przeslonieta metoda OnReceive()
CKlientKom *p; // klasa ktorej chce uzyc do 'obslugi' klientow
while(1){
	soc=new CMySocket;
	while (!hosts.Accept(*soc) && !hosts.GetLastError() ) ;
	AfxMessageBox("klient połaczony");
	gniazda.AddTail(soc);
	p = (CKlientKom*)AfxBeginThread(RUNTIME_CLASS(CKlientKom),0,0,CREATE_SUSPENDED);
	p->SetSoc(soc); // tak robie aby przekazac do obiektu CKlientKom gniazdo, ktore powiazany jest klient
	p->ResumeThread(); 
}

Watek startuje, problemem jest to ze gdy cos wysle z klienta, to gniazdo na serwerze nie regauje (nie wywoluje metody OnReceive() )
Nie wiem gdzie tu moze byc blad, moze zle podaje gniazdo do obiektu CKlientKom..
aha metoda SetSoc() wyglada tak:
SetSoc(CMySocket pArg)
{
sock=pArg; //socket jest typu CMySocket

}

0

Ale wiesz, że obiektów MFC nie można przekazywać między wątkami??

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_csocket.3a3a.attach.asp

Oczywiście możesz mieć 100 innych błędów, sprawdzaj błędy, uruchom program na Debugu, itp.

0

Ok, zrobilem to z Detach() i Attach(), ale reaguje tylko na pierwsza nadeslana informacje a na pozostale nie. Watek sie raczej nie konczy (nie jest wywolana ExitInstance() z klasy watka anie destruktor tej klasy)..

0

Jest weekend - wróżka ma wolne...
Strzelam: źle obsługujesz połączenie strumieniowe TCP [???]

0

Nie wiem na 100% ale chyba raczej dobrze to robie.
Wczesniej napisalem program ktory mogl laczyc sie tylko z jednym kompem, i tam wszystko mi dzialalo . Teraz chce napisac serwer, zeby moglo laczyc sie wiecej uzytkownikow, no ale jak widac mi nie wychodzi, a poza wprowadzeniem watkow nic sie poki co nie zmienilo..
Sorry ze tak mecze ale nigdzie nie moge znalezc opisu tego i sie pytam tutaj..

// Dobra, poki co znalazlem jakis przyklad w MSDN.. moze na podstawie niego cos sie dowiem.. dzieki za poswiecony czas ;]

0

Nie dalem rady :( ... Staralem sie, probowalem, ale jako ze z watkami i gniazdami mam pierwszy raz do czynienia to nie mam pojecia co robie zle...
Czy moglby mi ktos napisac kod prostej funckji (takiej zebym tylko zalapal o co w tym wszystkim biega..) ktora czeka na klienta i , kiedy sie jakis zglosi, tworzy nowy watek dla niego (i kod tego watka [klasy/funckji] oczekujacego na nadeslanie danych az do przyjscia komendy oznaczajacej koniec pracy klienta) i oczekuje na kolejnych klientow i tworzy dla nich takie same watki?
Oczywiscie w MFC..
Bylbym baardzo wdzieczny..

1 użytkowników online, w tym zalogowanych: 0, gości: 1