threadmanager.cpp

来自「这是VCF框架的代码」· C++ 代码 · 共 115 行

CPP
115
字号
/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*/#include "vcf/FoundationKit/FoundationKit.h"#include "vcf/FoundationKit/ThreadManager.h"#include "vcf/FoundationKit/ThreadManagerPeer.h"#include "vcf/FoundationKit/Lock.h"//ThreadManager.cppusing namespace VCF;ThreadManager* ThreadManager::threadManagerInstance = NULL;ThreadManager::ThreadManager():	peer_(NULL){	peer_ = SystemToolkit::createThreadManagerPeer();	if ( NULL == peer_ ) {		throw NoPeerFoundException();	}}ThreadManager::~ThreadManager(){	delete peer_;	peer_ = NULL;}void ThreadManager::create(){	ThreadManager::threadManagerInstance = new ThreadManager();	//create and add the "main" thread wrapper that wraps the	//main executable thread.	Thread* mainThread = Thread::getMainThread();	ThreadManager::addThread( mainThread );}void ThreadManager::terminate(){	Thread* mainThread = Thread::getMainThread();	delete mainThread;	delete ThreadManager::threadManagerInstance;}Thread* ThreadManager::getCurrentThread(){	Thread* result = NULL;	Lock l( ThreadManager::threadManagerInstance->mtx_ );	uint32 id = ThreadManager::threadManagerInstance->peer_->getCurrentThreadID();	std::map<uint32, Thread*>::iterator found =		ThreadManager::threadManagerInstance->threads_.find( id );	if ( found != ThreadManager::threadManagerInstance->threads_.end() ) {		result = found->second;	}	return result;}RunLoop* ThreadManager::getCurrentRunLoop(){	return ThreadManager::getCurrentThread()->getRunLoop();}Waitable::WaitResult ThreadManager::wait( std::vector<Waitable*>& waitObjects, std::vector<Waitable*>& signaledObjects ){	return ThreadManager::threadManagerInstance->peer_->wait( waitObjects, signaledObjects );}Waitable::WaitResult ThreadManager::wait( std::vector<Waitable*>& waitObjects, std::vector<Waitable*>& signaledObjects, uint32 timeoutInMilliseconds ){	return ThreadManager::threadManagerInstance->peer_->wait( waitObjects, signaledObjects, timeoutInMilliseconds );}void ThreadManager::addThread( Thread* thread ){	ThreadManager::threadManagerInstance->internal_addThread( thread );}void ThreadManager::removeThread( Thread* thread ){	ThreadManager::threadManagerInstance->internal_removeThread( thread );}void ThreadManager::internal_addThread( Thread* thread ){	Lock l(mtx_);	threads_[thread->getThreadID()] = thread;}void ThreadManager::internal_removeThread( Thread* thread ){	Lock l(mtx_);	std::map<uint32, Thread*>::iterator found = threads_.find( thread->getThreadID() );	if ( found != threads_.end() ) {		threads_.erase( found );	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?