1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _SWTHREADMANAGER_HXX
28 #define _SWTHREADMANAGER_HXX
29 
30 #include <osl/interlck.h>
31 #include <osl/mutex.hxx>
32 #include <rtl/ref.hxx>
33 
34 #include <boost/utility.hpp>
35 #include <memory>
36 
37 
38 class ObservableThread;
39 class ThreadManager;
40 
41 /** class to manage threads in Writer using a <ThreadManager> instance
42 
43     OD 2007-04-13 #i73788#
44     Conforms the singleton pattern
45 
46     @author OD
47 */
48 class SwThreadManager
49     : private ::boost::noncopyable
50 {
51     public:
52 
53         static SwThreadManager& GetThreadManager();
54 
55         static bool ExistsThreadManager();
56 
57         // private: don't call!
58         SwThreadManager();
59         // private: don't call!
60         ~SwThreadManager();
61 
62         oslInterlockedCount AddThread( const rtl::Reference< ObservableThread >& rThread );
63 
64         void RemoveThread( const oslInterlockedCount nThreadID );
65 
66         /** suspend the starting of threads
67 
68             Suspending the starting of further threads is sensible during the
69             destruction of a Writer document.
70 
71             @author OD
72         */
73         void SuspendStartingOfThreads();
74 
75         /** continues the starting of threads after it has been suspended
76 
77             @author OD
78         */
79         void ResumeStartingOfThreads();
80 
81         bool StartingOfThreadsSuspended();
82 
83     private:
84         static bool mbThreadManagerInstantiated;
85 
86         ::std::auto_ptr<ThreadManager> mpThreadManagerImpl;
87 
88 };
89 #endif
90