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 }
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |