Solved

Does AsyncCallback start a new thread?

Posted on 2004-10-20
3
399 Views
Last Modified: 2011-10-03
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
Comment
Question by:iamdj
  • 2
3 Comments
 
LVL 48

Accepted Solution

by:
AlexFM earned 350 total points
ID: 12357931
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
 
LVL 48

Expert Comment

by:AlexFM
ID: 12358031
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
 

Author Comment

by:iamdj
ID: 12358062
Thanks a lot for the quick and really good help!

/Dj
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…
This is a video that shows how the OnPage alerts system integrates into ConnectWise, how a trigger is set, how a page is sent via the trigger, and how the SENT, DELIVERED, READ & REPLIED receipts get entered into the internal tab of the ConnectWise …

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now