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/Synchro/ExtraSynchroSpace.h> 00015 #include <Cntm/Synchro/ExtraSynchroSpace.h> 00016 00017 void Cntm::ExtraSynchroSpace::AddSynchroTask(TaskBase* Task) 00018 { 00019 if (taskQueue.Add(Task)) 00020 { 00021 holdInstance = this; 00022 try 00023 { 00024 SpecUtils::SysThread::Start(&ExtraSynchroSpace::TaskThread, this); 00025 } 00026 catch (...) 00027 { 00028 holdInstance.SetNull(); 00029 throw; 00030 } 00031 } 00032 } 00033 00034 Cntm::SpecUtils::SysThread::ResultType CNTM_SYSTHREAD_PROC_DECL 00035 Cntm::ExtraSynchroSpace::TaskThread(void* Arg) 00036 { 00037 ExtraSynchroSpace* self = reinterpret_cast<ExtraSynchroSpace*>(Arg); 00038 00039 try 00040 { 00041 self->DoEnter(); 00042 self->taskQueue.Exec(); 00043 self->DoLeave(); 00044 } 00045 catch (...) 00046 { 00047 } 00048 00049 // Уничтожаем указатель на себя. 00050 try { self->holdInstance.SetNull(); } catch (...) {} 00051 00052 return CNTM_SYSTHREAD_RETURN_VALUE; 00053 } 00054
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |