1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_canvas.hxx"
26 
27 
28 #ifdef WNT
29 # if defined _MSC_VER
30 # pragma warning(push,1)
31 # endif
32 
33 # include <windows.h>
34 
35 # if defined _MSC_VER
36 # pragma warning(pop)
37 # endif
38 #endif
39 
40 #include "osl/diagnose.h"
41 #include "canvas/prioritybooster.hxx"
42 
43 
44 namespace canvas
45 {
46     namespace tools
47     {
48         struct PriorityBooster_Impl
49         {
50             int mnOldPriority;
51         };
52 
PriorityBooster(sal_Int32 nDelta)53         PriorityBooster::PriorityBooster( sal_Int32 nDelta ) :
54             mpImpl( new PriorityBooster_Impl )
55         {
56 #ifdef WNT
57             HANDLE aCurrThread = GetCurrentThread();
58             mpImpl->mnOldPriority = GetThreadPriority( aCurrThread );
59 
60             if ( 0 == SetThreadPriority( aCurrThread, mpImpl->mnOldPriority + nDelta ) )
61             {
62                 OSL_ENSURE( false,
63                             "PriorityBooster::PriorityBooster(): Was not able to modify thread priority" );
64             }
65 #else
66             nDelta = 0; // #i55991# placate gcc warning
67 #endif
68         }
69 
~PriorityBooster()70         PriorityBooster::~PriorityBooster()
71         {
72 #ifdef WNT
73             SetThreadPriority( GetCurrentThread(),
74                                mpImpl->mnOldPriority );
75 #endif
76         }
77 	} // namespace tools
78 
79 } // namespace canvas
80