XmlRpcThread.cc

Go to the documentation of this file.
00001 
00007 #if defined(XMLRPC_THREADS)
00008 
00009 #include "XmlRpcThread.h"
00010 
00011 #if defined(_WINDOWS)
00012 # define WIN32_LEAN_AND_MEAN
00013 # include <windows.h>
00014 # include <process.h>
00015 #else
00016 # include <pthread.h>
00017 #endif
00018 
00019 
00020 using namespace XmlRpc;
00021 
00022 
00024 XmlRpcThread::~XmlRpcThread()
00025 {
00026   if (_pThread)
00027   {
00028 #if defined(_WINDOWS)
00029     ::CloseHandle((HANDLE)_pThread);
00030 #else
00031     ::pthread_detach((pthread_t)_pThread);
00032 #endif
00033     _pThread = 0;
00034   }
00035 }
00036 
00039 void
00040 XmlRpcThread::start()
00041 {
00042   if ( ! _pThread)
00043   {
00044 #if defined(_WINDOWS)
00045     unsigned threadID;
00046     _pThread = (HANDLE)_beginthreadex(NULL, 0, &runInThread, this, 0, &threadID);
00047 #else
00048     ::pthread_create((pthread_t*) &_pThread, NULL, &runInThread, this);
00049 #endif
00050   }
00051 }
00052 
00054 void
00055 XmlRpcThread::join()
00056 {
00057   if (_pThread)
00058   {
00059 #if defined(_WINDOWS)
00060     ::WaitForSingleObject(_pThread, INFINITE);
00061     ::CloseHandle(_pThread);
00062 #else
00063     ::pthread_join((pthread_t)_pThread, 0);
00064 #endif
00065     _pThread = 0;
00066   }
00067 }
00068 
00070 unsigned int
00071 XmlRpcThread::runInThread(void* pThread)
00072 {
00073   XmlRpcThread* t = (XmlRpcThread*)pThread;
00074   t->getRunnable()->run();
00075   return 0;
00076 }
00077 
00078 #endif // XMLRPC_THREADS
00079 
00080 
Generated on Wed May 26 16:21:15 2010 for OverSim by  doxygen 1.6.3