So following all the fun with Java and then discovering someone wrote a ton of robot software known as MRPT in C++ I'm now looking at C++. Many concepts are common to C++ and Java which aren't in R or Mathematica so it's useful for work. As a motivating project I'm trying to make a nice GUI for a Kinect connected to my computer and then have commands piped through to an Arduino. I have the MRPT libraries for the Kinect. I have working serial communications with the Arduino (god damn I hate serial communication libraries!). I have vaguely understood the concept of a makefile and the way NetBeans handles different project types. The MRPT libraries include ways of calling multiple threads to deal with in and out commands. I'm trying to reproduce this basic "If I press anything then act on it, otherwise continue as normal" structure using multithreading, so I understand the principles. Presently it seems that all the guides I find online say I should use multithreading and queues as a producer-consumer setup. For example, listen_thread would listen for key input and add anything to a queue (using mutex) and other_thread is always doing something but checks the queue each iteration for any command to alter its behaviour. My question is whether this is the best way to go about it? I'm using pthread to do the threading, which is pretty straight forward, and the queing is simple via things like q.pop() etc. If down the line I want to have say 3 threads all producing and feeding into a single consumer does this approach scale? Should I be using something else if that's down the line? Calling multiple threads on a single PC means the PC architecture handles the load balancing, moving them around the multiple cores as it would any other set of programs. If a program makes extensive use of threading is there a simple way to not only spread them across cores but computers on a network or make use of GPUs? Or does that involve serious TCP/IP briding or some wacky GPU interface? I don't mean dynamic balancing, I might specific which computer does which thread. It isn't essential but it would be good to know.