ActiveObject.cpp

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #include <Cntm/ActiveObjects/ActiveObject.h>
00015 
00016 void Cntm::ActiveObject::TerminateAllThreads()
00017 {
00018         // Сообщаем всем потокам о завершении.
00019         ThreadsRegister::Enumerator en = threadsRegister.GetEnumerator();
00020         while (en.Next()) en.Current()->Terminate(); 
00021 
00022         // Проверяем, все ли потоки завершены, если все, то вызываем AllThreadsFinished().
00023         CheckAllThreadsFinished();
00024 }
00025 
00026 void Cntm::ActiveObject::CheckAllThreadsFinished()
00027 {
00028         if (threadsCount.DecAndTest())
00029         { // Только когда потоков не осталось и TerminateAllThreads() закончил работу.
00030                 threadsCount.Inc(); // Возвращаем начальное значение 1.
00031                 AllThreadsFinished(); // Сообщаем, что все потоки завершены.
00032         }
00033 }

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3