Во первых что значит из цикла? Если код цикла пишешь ты, то почему бы тебе
не спрашивать
была или нет нажата клавиша. Если ты во время обработки глубокого цикла
должен обрабатывать UI, то могу посоветовать использовть поточную модель.
А уж как ты реализуешь прерывание цикла, это уже твое дело.
Всегда можно вызвать
BOOL TerminateThread(
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);
Сработает наверняка, а что бы опеределить нажатие клавиши, то обрабатывай сообщение
WM_KEYDOWN (но только если твое приложение является активным. В противном случае
тебе необходимо писать свою DLL. И устанавливать хук
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
);
в коотором указываешь тип хука (WH_KEYBOARD_LL - но это только для NT/2000,
зато ловит все сообщения, или же WH_KEYBOARD - обрабатывает только нажатия
буквено цифровые клавиши)