Your game runs in one continuous loop. All updates to the objects, polling of input and rendering (graphics, audio, force feedback, etc) are done within this one single loop. Now, as part of any individual action, a small loop may run, but that loop must terminate as quickly as possible, so as not to stall all the other activities in the game loop.
Because we want to localize "physical" updates, what we do is set reminders for ourselves that we intend to update certain attributes in certain ways. Flags, basically. They're particularly important for input handling, as they allow us to appear to handle multiple inputs at the same time. Example:
while(gameRunning){ ... // this is where we obtain and process the input, but note that we // don't update the game objects GetKeyboardState(keys); for(int i = 0; i < NUM_KEYS; ++i) { switch(keys) { case VK_SPACE: if(!isJumping) // we don't allow jumping while jumping, isJumping = true; // and all we do is set a flag break; ... } } ... // here, we update the game object(s) by checking the various flags set earlier if(isJumping) { // jumping code needs to operate in steps, and then as the // final step clear the flag step = jump(step, interval); if(step >= interval) isJumping = false; } ...}