library of assembled shared sources

http://lass.cocamware.com

process.cpp

Go to the documentation of this file.
00001 /**     @file
00002  *      @author Bram de Greve (bramz@users.sourceforge.net)
00003  *      @author Tom De Muer (tomdemuer@users.sourceforge.net)
00004  *
00005  *      *** BEGIN LICENSE INFORMATION ***
00006  *      
00007  *      The contents of this file are subject to the Common Public Attribution License 
00008  *      Version 1.0 (the "License"); you may not use this file except in compliance with 
00009  *      the License. You may obtain a copy of the License at 
00010  *      http://lass.sourceforge.net/cpal-license. The License is based on the 
00011  *      Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover 
00012  *      use of software over a computer network and provide for limited attribution for 
00013  *      the Original Developer. In addition, Exhibit A has been modified to be consistent 
00014  *      with Exhibit B.
00015  *      
00016  *      Software distributed under the License is distributed on an "AS IS" basis, WITHOUT 
00017  *      WARRANTY OF ANY KIND, either express or implied. See the License for the specific 
00018  *      language governing rights and limitations under the License.
00019  *      
00020  *      The Original Code is LASS - Library of Assembled Shared Sources.
00021  *      
00022  *      The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
00023  *      The Original Developer is the Initial Developer.
00024  *      
00025  *      All portions of the code written by the Initial Developer are:
00026  *      Copyright (C) 2004-2007 the Initial Developer.
00027  *      All Rights Reserved.
00028  *      
00029  *      Contributor(s):
00030  *
00031  *      Alternatively, the contents of this file may be used under the terms of the 
00032  *      GNU General Public License Version 2 or later (the GPL), in which case the 
00033  *      provisions of GPL are applicable instead of those above.  If you wish to allow use
00034  *      of your version of this file only under the terms of the GPL and not to allow 
00035  *      others to use your version of this file under the CPAL, indicate your decision by 
00036  *      deleting the provisions above and replace them with the notice and other 
00037  *      provisions required by the GPL License. If you do not delete the provisions above,
00038  *      a recipient may use your version of this file under either the CPAL or the GPL.
00039  *      
00040  *      *** END LICENSE INFORMATION ***
00041  */
00042 
00043 #include "util_common.h"
00044 #include "process.h"
00045 #include "dictionary.h"
00046 
00047 #if LASS_PLATFORM_TYPE == LASS_PLATFORM_TYPE_WIN32
00048 #       pragma LASS_NOTE("util::setProcessPriority: using win32 implementation")
00049 #       define LASS_UTIL_PROCESS_HAVE_WIN32
00050 #elif LASS_HAVE_SYS_RESOURCE_H
00051 #       define LASS_UTIL_PROCESS_HAVE_SYS_RESOURCE
00052 #else
00053 #       error lass/util/process.h is not supported on this platform
00054 #endif
00055 
00056 #if defined(LASS_UTIL_PROCESS_HAVE_WIN32)
00057 #       define NOMINMAX
00058 #       define WIN32_LEAN_AND_MEAN
00059 #       include <windows.h>
00060 #elif defined(LASS_UTIL_PROCESS_HAVE_SYS_RESOURCE)
00061 #       include <sys/resource.h>
00062 #       if LASS_HAVE_LIMITS_H
00063 #               include <limits.h>
00064 #       endif
00065 #       ifndef NZERO
00066 #               define NZERO 20
00067 #       endif
00068 #endif
00069 
00070 namespace lass
00071 {
00072 namespace util
00073 {
00074 
00075 LASS_EXECUTE_BEFORE_MAIN_EX(lassImpl_processPriorityDictionary,
00076                 processPriorityDictionary().add("low", ppLow);
00077                 processPriorityDictionary().add("belownormal", ppBelowNormal);
00078                 processPriorityDictionary().add("normal", ppNormal);
00079                 processPriorityDictionary().add("abovenormal", ppAboveNormal);
00080                 processPriorityDictionary().add("high", ppHigh);
00081         )
00082 
00083 
00084 
00085 void setProcessPriority(ProcessPriority iPriority)
00086 {
00087         LASS_ASSERT(iPriority >= 0 && iPriority < numberOfProcessPriorities);
00088 
00089 #if defined(LASS_UTIL_PROCESS_HAVE_WIN32)
00090         static const int winPriorities[numberOfProcessPriorities] = 
00091         { 
00092                 IDLE_PRIORITY_CLASS, 
00093                 BELOW_NORMAL_PRIORITY_CLASS,
00094                 NORMAL_PRIORITY_CLASS,
00095                 ABOVE_NORMAL_PRIORITY_CLASS,
00096                 HIGH_PRIORITY_CLASS
00097         };
00098         const int priority = winPriorities[iPriority];
00099         LASS_ENFORCE_WINAPI(SetPriorityClass(GetCurrentProcess(), priority))
00100                 ("Failed to set process priority");
00101 
00102 #elif defined(LASS_UTIL_PROCESS_HAVE_SYS_RESOURCE)
00103         static const int niceValues[numberOfProcessPriorities] = 
00104         {
00105                 NZERO - 1,
00106                 NZERO / 2 - 1,
00107                 0,
00108                 -NZERO / 2,
00109                 -NZERO
00110         };
00111         const int niceValue = niceValues[iPriority];
00112         LASS_ENFORCE_CLIB(setpriority(PRIO_PROCESS, 0, niceValue));
00113 
00114 #else
00115 #       error setProcessPriority is not supported on this platform
00116 #endif
00117 }
00118 
00119 
00120 
00121 void setProcessPriority(const std::string& iPriority)
00122 {
00123         ProcessPriority priority = ppNormal;
00124         try
00125         {
00126                 priority = processPriorityDictionary()[iPriority];
00127         }
00128         catch(util::Exception)
00129         {
00130                 LASS_THROW("'" << iPriority << "' is an invalid priority setting.  "
00131                         "It should be one of these: " << processPriorityDictionary().keys() << ".");
00132         }
00133 
00134         setProcessPriority(priority);
00135 }
00136 
00137 
00138 
00139 }
00140 
00141 }
00142 
00143 
00144 // EOF

Generated on Mon Nov 10 14:21:04 2008 for Library of Assembled Shared Sources by doxygen 1.5.7.1
SourceForge.net Logo