oflog/include/dcmtk/oflog/helpers/threadcf.h

Go to the documentation of this file.
00001 // Module:  Log4CPLUS
00002 // File:    thread-config.h
00003 // Created: 4/2003
00004 // Author:  Tad E. Smith
00005 //
00006 //
00007 // Copyright 2003-2009 Tad E. Smith
00008 //
00009 // Licensed under the Apache License, Version 2.0 (the "License");
00010 // you may not use this file except in compliance with the License.
00011 // You may obtain a copy of the License at
00012 //
00013 //     http://www.apache.org/licenses/LICENSE-2.0
00014 //
00015 // Unless required by applicable law or agreed to in writing, software
00016 // distributed under the License is distributed on an "AS IS" BASIS,
00017 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00018 // See the License for the specific language governing permissions and
00019 // limitations under the License.
00022 #ifndef LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_
00023 #define LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_
00024 
00025 #define INCLUDE_CSTDDEF               /* For NULL */
00026 #include "dcmtk/ofstd/ofstdinc.h"
00027 
00028 #ifdef LOG4CPLUS_USE_PTHREADS
00029 #   include <pthread.h>
00030 #   include <semaphore.h>
00031 #   define LOG4CPLUS_MUTEX_PTR_DECLARE pthread_mutex_t*
00032 #   define LOG4CPLUS_MUTEX_CREATE ::log4cplus::thread::createNewMutex()
00033 #   define LOG4CPLUS_MUTEX_LOCK(mutex) pthread_mutex_lock(mutex)
00034 #   define LOG4CPLUS_MUTEX_UNLOCK(mutex) pthread_mutex_unlock(mutex)
00035 #   define LOG4CPLUS_MUTEX_FREE(mutex) ::log4cplus::thread::deleteMutex(mutex)
00036 #   define LOG4CPLUS_THREAD_HANDLE_TYPE  pthread_t
00037 #   define LOG4CPLUS_THREAD_KEY_TYPE pthread_t
00038 #   define LOG4CPLUS_GET_CURRENT_THREAD_NAME \
00039     ::log4cplus::thread::getCurrentThreadName()
00040 #   define LOG4CPLUS_GET_CURRENT_THREAD pthread_self()
00041 #   define LOG4CPLUS_THREAD_LOCAL_TYPE pthread_key_t*
00042 #   define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) \
00043     ::log4cplus::thread::createPthreadKey(cleanup)
00044 #   define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) pthread_getspecific(*(key))
00045 #   define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \
00046     pthread_setspecific(*(key), value)
00047 #   define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) \
00048     do { pthread_key_t * pthkey (key); pthread_key_delete(*pthkey); \
00049     delete pthkey; } while(0)
00050 namespace log4cplus {
00051     namespace thread {
00052         LOG4CPLUS_EXPORT LOG4CPLUS_MUTEX_PTR_DECLARE createNewMutex();
00053         LOG4CPLUS_EXPORT void deleteMutex(LOG4CPLUS_MUTEX_PTR_DECLARE);
00054         LOG4CPLUS_EXPORT LOG4CPLUS_THREAD_LOCAL_TYPE createPthreadKey(void (*) (void *));
00055     }
00056 }
00057 
00058 #elif defined(LOG4CPLUS_USE_WIN32_THREADS)
00059 #   undef WIN32_LEAN_AND_MEAN
00060 #   define WIN32_LEAN_AND_MEAN
00061 #   include <windows.h>
00062 
00063 #   define LOG4CPLUS_MUTEX_PTR_DECLARE CRITICAL_SECTION*
00064 #   define LOG4CPLUS_MUTEX_CREATE ::log4cplus::thread::createNewMutex()
00065 #   define LOG4CPLUS_MUTEX_LOCK(mutex)  EnterCriticalSection(mutex)
00066 #   define LOG4CPLUS_MUTEX_UNLOCK(mutex)  LeaveCriticalSection(mutex)
00067 #   define LOG4CPLUS_MUTEX_FREE(mutex) ::log4cplus::thread::deleteMutex(mutex)
00068 
00069 #   define LOG4CPLUS_THREAD_HANDLE_TYPE  HANDLE
00070 #   define LOG4CPLUS_THREAD_KEY_TYPE  DWORD
00071 #   define LOG4CPLUS_GET_CURRENT_THREAD  GetCurrentThreadId()
00072 #   define LOG4CPLUS_GET_CURRENT_THREAD_NAME \
00073     ::log4cplus::thread::getCurrentThreadName()
00074 #   define LOG4CPLUS_THREAD_LOCAL_TYPE DWORD
00075 #   define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) TlsAlloc()
00076 #   define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) TlsGetValue(key)
00077 #   define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \
00078     TlsSetValue(key, OFstatic_cast(LPVOID, value))
00079 #   define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) TlsFree(key)
00080 #   if defined (_MSC_VER)
00081 #     undef LOG4CPLUS_HAVE_TLS_SUPPORT
00082 #     undef LOG4CPLUS_THREAD_LOCAL_VAR
00083 // Comment out the following two lines if you do intend to use log4cplus.dll
00084 // for loading using LoadLibrary(). The __declspec(thread) functionality is not
00085 // compatible with such DLL use. For more information why is this necessary see
00086 // <http://msdn.microsoft.com/en-us/library/2s9wt68x(vs.80).aspx>.
00087 #     define LOG4CPLUS_HAVE_TLS_SUPPORT 1
00088 #     define LOG4CPLUS_THREAD_LOCAL_VAR __declspec(thread)
00089 #   endif
00090 
00091 
00092 namespace log4cplus { namespace thread {
00093 
00094 LOG4CPLUS_EXPORT LOG4CPLUS_MUTEX_PTR_DECLARE createNewMutex();
00095 LOG4CPLUS_EXPORT void deleteMutex(LOG4CPLUS_MUTEX_PTR_DECLARE);
00096 
00097 } } // namespace log4cplus { namespace thread {
00098 
00099 #elif defined(LOG4CPLUS_SINGLE_THREADED)
00100 #   define LOG4CPLUS_MUTEX_PTR_DECLARE int*
00101 #   define LOG4CPLUS_MUTEX_CREATE NULL
00102 #   define LOG4CPLUS_MUTEX_LOCK(mutex)
00103 #   define LOG4CPLUS_MUTEX_UNLOCK(mutex)
00104 #   define LOG4CPLUS_MUTEX_FREE(mutex)
00105 #   define LOG4CPLUS_THREAD_HANDLE_TYPE  void *
00106 #   define LOG4CPLUS_THREAD_KEY_TYPE int
00107 #   define LOG4CPLUS_GET_CURRENT_THREAD 1
00108 #   define LOG4CPLUS_GET_CURRENT_THREAD_NAME \
00109     LOG4CPLUS_C_STR_TO_TSTRING("single")
00110 #   define LOG4CPLUS_THREAD_LOCAL_TYPE void*
00111 #   define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) NULL
00112 #   define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) (key)
00113 #   define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \
00114     do { (key) = (value); } while (0)
00115 #   define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) do { (key) = NULL; } while (0)
00116 #   undef LOG4CPLUS_HAVE_TLS_SUPPORT
00117 #   undef LOG4CPLUS_THREAD_LOCAL_VAR
00118 
00119 #else
00120 #   error "You Must define a Threading model"
00121 #endif
00122 
00134 #ifndef LOG4CPLUS_SINGLE_THREADED
00135 #  define LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX(mutex) \
00136              do { ::log4cplus::thread::Guard _sync_guard_object(mutex);
00137 #else
00138 #  define LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX(mutex) do { (void)(mutex);
00139 #endif
00140 
00141 #define LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX } while (0)
00142 
00143 
00144 #endif // LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_
00145 


Generated on 6 Jan 2011 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.5.1