Прерывания от пользователя
Функции ввода пользователя и acedCommand (), acedCmd (), acedEntSel (), acedNEntSelP (), acedNEntSel (), acedDragGen (), и acedSSGet () функции возвращают RTCAN, если пользователь AutoCAD отвечает, нажимая ESC. Внешняя функция должна обращаться с этим ответом как запрос отмены задания и возвращение немедленно.
ObjectARX также обеспечивает функцию, acedUsrBrk (), это явно проверяет{*отмечает*}, нажал ли пользователь ESC. Эта функция позволяет приложениям ObjectARX проверить прерывание пользователя.
Приложение не должно вызвать acedUsrBrk () если это не исполняет длинное вычисление между взаимодействиями с пользователем. Функция acedUsrBrk () никогда не должна использоваться как замена{*заместитель*} проверки значения, возвращенного функциями ввода пользователя, которые могут возвращать RTCAN.
В некоторых случаях, приложение будет хотеть игнорировать запрос отмены пользователя. Если дело обстоит так, это вызвало acedUsrBrk () чтобы очистить запрос; иначе, ESC будет все еще невыполненный{*выдающийся*} и вызовет следующий запрос ввода пользователя терпеть неудачу. (Если приложение игнорирует ESC, это должно печатать сообщение, чтобы сообщить пользователю, которого это делает так.) Всякий раз, когда ObjectARX-приложение вызвано, условие ESC автоматически очищено.
Например, следующий кодовый фрагмент терпит неудачу, если пользователь вводит ESC в подсказку.
int test()
{
int i;
while (!acedUsrBrk()) {
acedGetInt("\nInput integer:", &i); // WRONG
.
.
.
}
}
Слегка изменяемый кодовый фрагмент, который следует правильно за метками ввод ESC без того, чтобы вызвать acedUsrBrk ().
int test()
{
int i;
for (;;) {
if (acedGetInt("\nInput integer:", &i) != RTNORM)
break;
...
}
}
Следующая выборка изменяет{*заменяет*} условие цикла. Это строительство также работает правильно.
int test()
{
int i;
while (acedGetInt("\nInput integer:", &i) == RTNORM) {
...
}
}
Имеющее силу место, чтобы использовать acedUsrBrk () находится в длинной операции. Например, код, который шагает через каждый примитив в базу данных рисунка, может быть потребление времени и должен вызвать acedUsrBrk ().