ObjectARX, AutoCAD. Среда программирования библиотеки C++



         

Вложение транзакций


Транзакции могут быть вложены — то есть Вы можете запустить одну транзакцию внутри другой и заканчивать или прерывать недавнюю транзакцию. Операционный менеджер поддерживает транзакции в стеке, с самой современной транзакцией наверху стека. Когда Вы запускаете новую транзакцию, используя AcTransactionManager:: startTransaction (), новая транзакция добавлена к вершине стека, и указатель на это возвращен (образец AcTransaction). Когда кто - то вызывает AcTransactionManager:: endTransaction () или AcTransactionManager:: abortTransaction (), транзакция наверху стека закончена или прервана.

Когда объектные указатели получены от объекта IDs, они всегда связываются с самой современной транзакцией. Вы можете получить недавнюю транзакцию, используя AcTransactionManager:: topTransaction (), затем использовать AcTransaction:: getObject () или AcTransactionManager:: getObject () чтобы получить указатель на объект. Операционный менеджер автоматически связывает объектные указатели, полученные с недавней транзакцией. Вы можете использовать AcTransaction:: getObject () только с самой современной транзакцией.

Когда вложенные транзакции начаты, объектные указатели, полученные во внешних содержащих транзакциях также доступны для операции в самой внутренней транзакции. Если недавняя транзакция прервана, все операции, сделанные на всех объектах (связанный или с этой транзакцией или содержащими) так как начало недавней транзакции отменено, и объекты прокручены назад к состоянию в начале недавней транзакции.

Объектные указатели, полученные в недавней транзакции прекращают иметь силу, как только это прервано.

Если самая внутренняя транзакция закончена успешно,  вызывая AcTransactionManager:: endTransaction (), объекты, чей указатели были получены в этой транзакции, станут связанным с содержащей транзакцией и доступен для операции. Этот процесс продолжен, пока наиболее удаленная (первая) транзакция не закончена, в котором модификации времени на всех объектах совершены{*переданы*}. Если наиболее удаленная транзакция прервана, все операции на всех объектах отменены, и ничто не совершено{*передано*}.




Содержание  Назад  Вперед