?
Solved

Sending between threads

Posted on 2004-03-20
21
Medium Priority
?
188 Views
Last Modified: 2010-04-01
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.
0
Comment
Question by:SnipKing
  • 11
  • 4
  • 2
17 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 10641980
>>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
 

Author Comment

by:SnipKing
ID: 10642017
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
 
LVL 86

Expert Comment

by:jkr
ID: 10642053
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
Industry Leaders: 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!

 

Author Comment

by:SnipKing
ID: 10642219
but how would i access the other threads variables? how would i reference the thread?
0
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 10642231
>>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
 
LVL 30

Expert Comment

by:Axter
ID: 10644362
You can share data between threads by using MapView API functions.
0
 
LVL 30

Expert Comment

by:Axter
ID: 10644365
0
 
LVL 86

Expert Comment

by:jkr
ID: 10644370
>>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
 
LVL 86

Expert Comment

by:jkr
ID: 10644372
Um, the article reads "for exchanging data between executables"...
0
 
LVL 30

Expert Comment

by:Axter
ID: 10644548
>>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
 
LVL 86

Expert Comment

by:jkr
ID: 10644555
>>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
 
LVL 86

Expert Comment

by:jkr
ID: 10688886
SnipKing - anything else you need to know?
0
 
LVL 86

Expert Comment

by:jkr
ID: 10939298
Um, what Axter posted applies to inter-process communication, not inter-thread communication.
0
 
LVL 30

Expert Comment

by:Axter
ID: 10939366
I agree.
0
 
LVL 86

Expert Comment

by:jkr
ID: 10968638
modulo - do you read the comments that we are expected to leave before forcing an "accept"? :o)
0
 
LVL 86

Expert Comment

by:jkr
ID: 10969095
>>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
 
LVL 86

Expert Comment

by:jkr
ID: 10969804
Thanks, modulo - I'll try to be less unclear the next time :o)
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

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

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
Suggested Courses

840 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