ExtraSynchroSpace.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/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 

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