Это неудобно. Я искусственно генерирую событие при смене состояния,
тогда обработка состояния выглядит так: ...
if (state == WAITING)
{ switch (event)
{ case evNEW: // здесь действия при входе в состояние
break;
case evKEY: // здесь действия при нажатии на кнопку
state = STOP;
break;
case evTIMER: // здесь действия при сработке таймера
break;
}
// здесь действия при каждом цикле
}
Но можно и без событий
if (state-old_state)
// делаем один раз