📄 pthread.cpp
字号:
/*============================================================================. | Copyright (C) 2006 Gareth Buxton | |----------------------------------------------------------------------------| | LogPlusPlus is free software; you can redistribute it and/or | | modify it under the terms of the GNU Lesser General Public | | License as published by the Free Software Foundation; either | | version 2.1 of the License, or (at your option) any later version. | | | | LogPlusPlus is distributed in the hope that it will be useful, | | but WITHOUT ANY WARRANTY; without even the implied warranty of | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | Lesser General Public License for more details. | | | | You should have received a copy of the GNU Lesser General Public | | License along with this library; if not, write to the Free Software | | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | '============================================================================*/#include <liblpp/PThread.h>//=============================================================================LPP_NAMESPACE_BEGIN//=============================================================================static const pthread_cond_t COND_INITIALIZER = PTHREAD_COND_INITIALIZER;static const pthread_mutex_t MUTEX_INITIALIZER = PTHREAD_MUTEX_INITIALIZER;PThread::PThread(): Thread(), cond(COND_INITIALIZER), mutex(MUTEX_INITIALIZER), id(0){}PThread::PThread(Runnable& runnable): Thread(runnable), cond(COND_INITIALIZER), mutex(MUTEX_INITIALIZER), id(0){}PThread::~PThread(){}void PThread::lock(){// std::cout << "LogThreadP::lock()" << std::endl; pthread_mutex_lock(&mutex);// std::cout << "done" << std::endl;}void PThread::unlock(){// std::cout << "LogThreadP::unlock()" << std::endl; pthread_mutex_unlock(&mutex);// std::cout << "done" << std::endl;}void PThread::yield(){// std::cout << "LogThreadP::yield()" << std::endl; pthread_yield();// std::cout << "done" << std::endl;}void PThread::join(){// std::cout << "LogThreadP::join()" << std::endl; pthread_join(thread, 0);// std::cout << "done" << std::endl;}void PThread::wait(){// std::cout << "LogThreadP::wait()" << std::endl; pthread_cond_wait(&cond, &mutex);// std::cout << "done" << std::endl;}void PThread::signal(){// std::cout << "LogThreadP::signal()" << std::endl; pthread_cond_signal(&cond);// std::cout << "done" << std::endl;}/** * Separate thread method to call Log.startThread() * without the ThreadCallP.start() method blocking. **/void* startPThread(void* data){ ((PThread*) data)->run(); // block return (void*) 0;}void PThread::start(){// handle = pthread_create(&handle, &pthread_attr, startPThread, this); id = pthread_create(&thread, NULL, startPThread, this); pthread_yield();}void PThread::stop(){ runnable.end();}Thread* PThreadMill::create(Runnable& runnable) const{ return new PThread(runnable);}//PThread::PThread()//{//}////PThread::~PThread()//{//}//=============================================================================LPP_NAMESPACE_END//=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -