Цитата:
Или же вы говорите, что и другие виды программ должны задействовать этот принцип?
Я вот продал-таки заказчику "мега-визард", а редактор продать не мог, и даже не доделал тогда. Ибо редактор рассчитан на разработчика, а вьюер на пользователя
Цитата:
1. Иконки таймеров - понятие более высокоуровневое, чем сообщения и охраны.
Иконка типа таймер может быть реализована при помощи сообщений и охран. А может и иначе.
Точно, sleep и блокировкой треда. Но, заметьте:
A) Я ввожу только BOOL переменную-условие, и одна и та же схема при одних опциях кодогенератора сгенерится в код с обработчиками сообщений (напр, для Windows-приложений), а при других опциях сгенерится в код с nanosleep задержками, а с третьими - вообще в код прерыванием от таймера.
В) Тут еще есть композиция сообщений: ожидание ввода и таймаут, ожидание данных по сети и override действиями оператора.
Так что предлагаемое решение наиболее простое и исключающее как таймы, так и ВВОД/ВЫВОД.
Цитата:
Другое дело, что программы-помощники, вроде вашей, должны останавливаться на каждой иконе, ожидая ответа пользователя. Тогда, конечно, охрана должна быть внутри икон.
Я тоже сначала думал, что делал экзотические вещи.
Но: Как только мы показываем пользователю вьюер, мы должны отображать динамику "со скоростью мысли", т.е. 1 иконку в секунду.
И еще: Десятки примеров с остановками можно найти в книгах Паронджанова. Просто никому в голову не приходило работать со схемой типа "Заболел"
Цитата:
Функции должны принимать в том числе переменные, связанные с внешней средой?
Да, должны. А у меня еще и историю, и достоверности.
Цитата:
Всё-таки нужно иногда и влиять на окружающий мир. Сообщения посылать наружу.
Опять пригодится икона ВЫВОД!
Tcl_TraceVar(interp, "y",...); set y $x;
ну и событие по изменению.
Кстати, в отличие от вывода, можно посылать, если только по изменению. Посылать событие в графическую оболочку, например.
А ВВОД/ВЫВОД оставить как printf. Иногда пригодится.