It's common to separate game logics and rendering into separate threads but in order to make it work well without any losses you have to design the system to be asynchronous. I've done it using messaging but so far I only got Rendering thread and Main thread. I have the main thread pull events from the window, turn them into a message and send them to the appropriate thread. This way the threads don't depend on each others and they can run full speed without having to wait up on synchronization.
Also a gain from this is that my main thread runs at a frequency of 100 times a second and my rendering at 60. My logic thread will probably run at 100 too or faster. This architecture would also allow you to make the physics(if you want that) in it's own separate thread.
*EDIT*
More about your problem, are you somewhere pulling the events from the window? If you don't then the Input object won't be updated. And you should pull the events in the same thread as the input object or else you might read invalid input at the same time as you try to update it. Also why Windows interpret your application as unresponsive might be if you have the update thread run at full speed without any sleep. I.E your frequency of your thread is the same as the CPU.