15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Problems with CAsyncSocket in a workerthread

Cyrill Stachniss -- Cyrill.Stachniss@ArcoMedia.de
Tuesday, March 25, 1997

Environment: VC++ 4.2-flat, NT 4.0

Hello !
I'm writing a chatserver and want to give any incomming
client (Java) one thread (workerthread) for reading and
writing data. 
But I have problems to get the OnReceive-notification in 
this thread. If I don't start the workerthread and create 
the socket (CAsyncSocket) in the mainthread I get the 
OnReceive-notification.

---
The thread starts here...
AfxBeginThread(ClientIOThread, (LPVOID) socket.Detach() )

...and calls this "Workerthread-Function":
UINT ClientIOThread( LPVOID pParam )
{
	CClientSocket* pSocket = new CClientSocket();
	pSocket->Attach( (SOCKET) pParam,  FD_CLOSE | FD_READ | FD_WRITE );	



Sreekant Sreedharan -- sreekant@india.deneb.com
Friday, March 28, 1997

Cyrill Stachniss wrote:
> 
> Environment: VC++ 4.2-flat, NT 4.0
> 
> Hello !
> I'm writing a chatserver and want to give any incomming
> client (Java) one thread (workerthread) for reading and
> writing data.
> But I have problems to get the OnReceive-notification in
> this thread. If I don't start the workerthread and create
> the socket (CAsyncSocket) in the mainthread I get the
> OnReceive-notification.
> 
> ---
> The thread starts here...
> AfxBeginThread(ClientIOThread, (LPVOID) socket.Detach() )
> 
> ...and calls this "Workerthread-Function":
> UINT ClientIOThread( LPVOID pParam )
> {
>         CClientSocket* pSocket = new CClientSocket();
>         pSocket->Attach( (SOCKET) pParam,  FD_CLOSE | FD_READ | FD_WRITE );

	I'm not too sure about the solution myself, but I can give you a hint. 
	What I see here is that you are creating a one socket the main thread
and another in the child thread. Now the problem is that a CAsyncSocket
object internally uses a hidden CWnd to receive your messages. This is
how you have a `Acync' mode of transfer. I am sure it will be clear if
you have gone through the SDK winchat example.

	Now you may notice that the CWnd Object can receive notification only
through one thread, which may be why you are having this problem.

-- 
- From Sreekant Sreedharan




Become an MFC-L member | Вернуться в корень Архива |