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