Thank you for responding to my query. I always appreciate it when people take the time to help. The Run() method in AtlServiceModule calls this method void RunMessageLoop() throw() { MSG msg; while (GetMessage(&msg, 0, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } } and I have checked and made sure this is being hit. As to only using a timer, my service is instantiating a COM object that uses WinSock messages (that weren't processed either). I have since written my own WinSock module that uses overlapped IO, but I am rather stubborn and would like to know WHY this code doesn't work. Timers worked fine in a service generated under VC6. Again, I'd like to thank the people that have responded to my query. I posted the same question in a newsgroup and no one responded.