Without too much study of your code, one thing I notice is that each time you create a new "motorController" instance you are passing "*m_systemHandler". This is creating a copy of the System instance pointed to by m_systemHandler, meaning each motorController instance has its own unique System instance, not a pointer to what I think you want as the main System instance passed to the threadController constructor.