Выделение одного экземпляра на поток (среда Boost) - PullRequest
0 голосов
/ 17 августа 2011

Я новичок в Boost и перерабатываю класс ведения журнала, который должен работать в многопоточном приложении. Он был разработан, чтобы работать как объект ostream, но «не работал» (Сказал голос Эдди Иззарда для тех из вас, кто знает о его упоминании о вертолете Давинчи).

Вы можете использовать его следующим образом:

Logger &logger = Logger::instance();
logger << "He designed a helicopter you know...that did not work." << endl;

Так что изначально он был разработан как одноэлементный, и после нескольких подходов я подумал, что, возможно, Logger :: instance () может вернуть Logger, уникальный для потока. Я мог бы использовать STL для определения карты между идентификатором Boost Thread и экземпляром класса Logger.

Тогда я начал думать, что, возможно, мог бы быть более разумный способ сделать это, используя некоторую форму локального хранилища потока?

Одна проблема с картой состоит в том, что я должен сделать уборку дома, чтобы периодически удалять регистраторы, когда потоки были прерваны. Я начал чувствовать, что я заново изобретал вещи.

Я вижу, что Boost поддерживает локальное хранилище потоков.

Есть мысли или предостережения?

Спасибо

Кенни

1 Ответ

0 голосов
/ 18 августа 2011

Я использовал локальное хранилище потока Boost и зарегистрировал каждый регистратор с объектом, который направляет данные в файлы или в cout.

Kenny

...