/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _CPPU_THREADPOOL_JOBQUEUE_HXX_ #define _CPPU_THREADPOOL_JOBQUEUE_HXX_ #include #include #include #include #include namespace cppu_threadpool { extern "C" typedef void (SAL_CALL RequestFun)(void *); struct Job { void *pThreadSpecificData; RequestFun * doRequest; }; typedef ::std::list < struct Job > JobList; typedef ::std::list < sal_Int64 > CallStackList; class DisposedCallerAdmin; typedef boost::shared_ptr DisposedCallerAdminHolder; class JobQueue { public: JobQueue(); ~JobQueue(); void add( void *pThreadSpecificData, RequestFun * doRequest ); void *enter( sal_Int64 nDisposeId , sal_Bool bReturnWhenNoJob = sal_False ); void dispose( sal_Int64 nDisposeId ); void suspend(); void resume(); sal_Bool isEmpty(); sal_Bool isCallstackEmpty(); sal_Bool isBusy(); private: ::osl::Mutex m_mutex; JobList m_lstJob; CallStackList m_lstCallstack; sal_Int32 m_nToDo; sal_Bool m_bSuspended; oslCondition m_cndWait; DisposedCallerAdminHolder m_DisposedCallerAdmin; }; } #endif