Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 430
  • Last Modified:

Does AsyncCallback start a new thread?

Hi!
I need help with a problem i am having...

I have made a simple program that starts and create a thread that makes a connection to a server.
What i want to do is have my mainthread doing some gui-stuff, and a socket-thread that handles all the socket-stuff.
So i made a class that have a function called Start that makes a connection, and then sets a asynccallback:

Start:
      m_sock.Blocking = false;
      AsyncCallback onconnect = new AsyncCallback( OnConnect );
      m_sock.BeginConnect( epServer, onconnect, m_sock );

then when it runs OnConnect:
      AsyncCallback Receivedata = new AsyncCallback( OnReceivedData );
      sock.BeginReceive( m_byBuff, 0, m_byBuff.Length, SocketFlags.None, Receivedata, sock );


What i was thinking is that the socket thread that starts with this funtion should only handle the socket stuff.
But when i run my program and the socket is set up my socket-thread dies beacuse the function has ended.

But the funny thing is that i can still receive data on my socket?
When i make these AsyncCallbacks and they gets triggered, do they start their own thread?

So my question is this, since my program is running and can handle incoming data eventhough my thread that started the socket has died...which thread is handling my OnReceivedData???

Any help and/or remarks will be much appreciated!

Thanks!
/Dj
Thanks for you help!
0
iamdj
Asked:
iamdj
  • 2
1 Solution
 
AlexFMCommented:
When you use .NET sockets in asynchronous mode, you don't need to create a worker thread. .NET takes care about creating additional threads for sockets and notifies your program when some socket events are raised.
Download file CSharp.msi from here:
http://www.microsoft.com/downloads/details.aspx?familyid=08e3d5f8-033d-420b-a3b1-3074505c03f3&displaylang=en

and read asynchronous sockets sample. It contains all information to build socket server and client applications.
0
 
AlexFMCommented:
The answer is simple - create non-blocking socket in the main thread.
Your worker thread dies because thread function exits. You can receive data from socket because socket runs in it's own thread.

Interesting question is whether callback functions are called in the context of main thread or socket worker thread. You can test this by calling Thread.CurrentThread.GetHashCode from the main thread and callback and comparing results.
0
 
iamdjAuthor Commented:
Thanks a lot for the quick and really good help!

/Dj
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now