Sending between threads

I have a simple multi threaded program, a TCP server, and i am tryinng to send data between each thread, for example sending data to each thread's socket. Basicly the sort of thing i need to to be able to somehow find every thread thats running and be able to access variables in it (for example ints and chars, and sockets of course) is this even possible? and if so, how would i go about it?

I have managed to find a little work around by having each thread assigned a number then using several CStrinngLists's and thread 4 for example uses the fourth item on each list - that way the variables are stored in the lists which are global so a thread can easilly access anouther threads variables by just going to the wrong place on the list and doing stuff, but this is unreliable and not really a good way to do it i dont think.
SnipKingAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
jkrConnect With a Mentor Commented:
>>how would i reference the thread?

If you have created a thread, pass it a pointer to the struct. Then, you would use the Thread ID to access the associated struct. Just put it in a map or something else...
0
 
jkrCommented:
>>i need to to be able to somehow find every thread thats running and be able to access
>>variables in it (for example ints and chars, and sockets of course) is this even possible?

Have your threads use a common storage layout like

class CThreadData {

public:

    CThreadData () { InitializeCriticalSection ( &m_cs);}
    ~CThreadData () { DeleteCriticalSection ( &m_cs);}

    int GetSomeDate () {
        int n;
        EnterCriticalSection ( &m_cs);
        n = m_nSomeData;
        LeaveCriticalSection ( &m_cs);
        return n;
    }
    void SetSomeDate ( int n) {
        EnterCriticalSection ( &m_cs);
        m_nSomeData = n;
        LeaveCriticalSection ( &m_cs);
    }
protected:
    int m_nSomeData;
    CRITICAL_SECITON m_cs;
};

This will ensure the proper synchronisation when you access the data. You can keep these classes in a list and pass a pointer to each thread's associated instance in the 1st parameter when creating it.
0
 
SnipKingAuthor Commented:
would this allow me to use sockets on other threads? or just have a variable that all threads can access? (like a global variable)
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
jkrCommented:
You will have a common storage structure, one for each thread. Whether you put sockets in there or other data is up to you.
0
 
SnipKingAuthor Commented:
but how would i access the other threads variables? how would i reference the thread?
0
 
AxterCommented:
You can share data between threads by using MapView API functions.
0
 
AxterCommented:
0
 
jkrCommented:
>>You can share data between threads by using MapView API functions

Shouldn't that be "between processes"? For threads, this is overkill, since they already share a common address space.
0
 
jkrCommented:
Um, the article reads "for exchanging data between executables"...
0
 
AxterCommented:
>>Shouldn't that be "between processes"? For threads, this is overkill, since they already share a common address space.
You're right.
It's Sunday morning, and I didn't have my morning coffee yet. :-)
0
 
jkrCommented:
>>It's Sunday morning, and I didn't have my morning coffee yet

Well, here in NYC, too - but I *did* already have coffe :o)
0
 
jkrCommented:
SnipKing - anything else you need to know?
0
 
jkrCommented:
Um, what Axter posted applies to inter-process communication, not inter-thread communication.
0
 
AxterCommented:
I agree.
0
 
jkrCommented:
modulo - do you read the comments that we are expected to leave before forcing an "accept"? :o)
0
 
jkrCommented:
>>but saw no new recommandation in your post

Well, I thought I was clear in stating that Axter's comments were not really related to the subject of this Q and he agreed...
0
 
jkrCommented:
Thanks, modulo - I'll try to be less unclear the next time :o)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.