Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Sending between threads

Posted on 2004-03-20
21
Medium Priority
?
187 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 11
  • 4
  • 2
21 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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

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.

Question has a verified solution.

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

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
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 goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

636 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