It's a little more complicated. I've been checking to see what happens to a single-threaded program when you press ctrl-c. Since this happens in a new thread, the Eiffel thread continues to run while the new thread runs 'failure'. This causes the Eiffel thread to crash. In the old days when hardware had only one processor this wasn't really a problem since 'failure' exits. I think you can use the same approach we already discussed but you need to look at the thread id. If 'eiffel_signal_handler' has a thread-id that isn't the root's thread-id, take the fast exit. #ifdef EIF_THREADS if (rt_globals == NULL) #else if (root_thread_id != current_thread_id()) #endif { if (sig != SIGINT && sig != SIGBREAK) printf("\nSignal %d while in a non-Eiffel thread.\n", sig); exit(2); There are actually 5 different control signals for which Windows creates a new thread. They are described here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683242(v=vs.85).aspx