ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
324298 Топик полностью
bialix (20.04.2012 11:12 - 11:14, просмотров: 101) ответил Скрипач на ...или очередной прочитанный элемент имеет значение "нет событий".
строго говоря EV_NO_EVENT событием не является. Вы пытаетесь ввести в заблуждение окружающих и возможно себя. EV_NO_EVENT - это специальное маркерное значение, которое вы используете, чтобы показать, что в очереди событий нет данных. Т.е. ваша функция возвращает или реальные события ИЛИ маркерное значение. Такой подход часто используется в Сях по причине убогости языка и является оптимизацией данного случая: if (has_event()) { switch (get_next_event()) { case EV_1: case EV_2: ... break; default: break; } } else { Sleep(); } Аналогично работает, например, библиотечная функция getchar и возвращает или прочитанный символ или специальное значение, чаще всего -1. Подумайте о том, что в более серьезных языках, в которых очереди и списки реализуются на уровне языка, при попытке прочитать следующий элемент из пустой очереди или пустого списка вы получите исключение. В сях исключений нет, поэтому приходится использовать маркерные значения. Дабы сразу ответить на возможные возражения: * то, что маркерное значение для компилятора не отличается от реальных событий, не делает маркерное значение событием * то, что маркерное значение удобно обрабатывать в том же switch, что и реальные события, не делает маркерное значение событием * то, что вам удобно называть маркерное значение событием, не делает маркерное значение событием.