Категории CodeSite и потоки - PullRequest
2 голосов
/ 07 октября 2011

Я экспериментирую с CodeSite Express, встроенным в Delphi XE. Я хочу использовать функцию Category следующим образом:

CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
  DoSomething;
finally
  CodeSite.ExitMethod ('SomeMethod');
end;

Проблема в том, что если DoSomething также содержит код регистрации, который устанавливает категорию, то ExitMethod окажется в другой категории и разрушит всю иерархию в средстве просмотра.

Еще хуже, если сработает многопоточность: установка Category и последующий вызов команд журнала, очевидно, не является атомарной операцией, поэтому два потока, использующие ведение журнала CodeSite, не могут реально использовать Category. По крайней мере, так это выглядит в моих журналах. Я бы ожидал, что Category будет локальным для потока, но, похоже, нет.

Каков правильный шаблон для работы с категориями в контексте вложенных журналов и потоков?

Спасибо!

1 Ответ

6 голосов
/ 07 октября 2011

Создайте еще один объект Codesite, возможно, по одному для каждого потока, и установите категорию этих объектов.

Существуют различные способы сделать это.Вы можете иметь конкретный объект, такой как MyThreadCodesite: TCodeSite;в которую вы пишете, или вы можете определить свойство для потока, которое называется «Codesite» и ссылается на этот объект.Таким образом, ваш код потока будет выглядеть точно так же, в нем говорится "Codesite.Send ('hello');"но ссылается на объект потока.

Это хорошо работает, как только вы это сделаете.У меня есть около десяти объектов TCodesite в одном проекте, и раскраска позволяет легко увидеть, какая часть системы делает.

...