Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

Ну и заодно добавим еще один метод в наш класс Clock (листинг 15).

Листинг 15. Класс CLock с новым методом.

class CLock

{

  friend class CScopeLock;

  CRITICAL_SECTION m_CS;

public:

  void Init() { ::InitializeCriticalSection(&m_CS); }

  void Term() { ::DeleteCriticalSection(&m_CS); }

  void Lock() { ::EnterCriticalSection(&m_CS); }

  BOOL TryLock() { return ::TryEnterCriticalSection(&m_CS); }

  void Unlock() { ::LeaveCriticalSection(&m_CS); }

  BOOL Check() { return CheckCriticalSection(&m_CS); }

};

Использовать метод Check() в release-конфигурациях не стоит, возможно, что в будущем, в какой-нибудь Windows64, структура RTL_CRITICAL_SECTION изменится, и результат такой проверки будет не определен. Так что ему самое место "жить" внутри всяческих ASSERT'ов.

Итак, что мы имеем? Мы имеем проверку на лишний вызов ::LeaveCriticalSection() и ту же трассировку для блокировок. Не так уж много. Особенно если трассировка о блокировке имеет место, а вот нить, забывшая освободить критическую секцию, давно завершилась. Как быть? Вернее, что бы еще придумать, чтобы ошибку проще было выявить? Как минимум, прикрутить сюда __LINE__ и __FILE__, константы, соответствующие текущей строке и имени файла на момент компиляции этого метода.


Рекомендуем скачать другие рефераты по теме: реферат на экономическую тему, инновационная деятельность.


Категории:




Предыдущая страница реферата | 15  16  17  18  19  20  21  22  23  24  25 |


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я