switched from PracticalSocket to libasio
[anytun.git] / src / Sockets / Thread.h
blobd784a1594f6a2b8772c15fd6a45e216cf8398c32
1 /** \file Thread.h
2 ** \date 2004-10-30
3 ** \author grymse@alhem.net
4 **/
5 /*
6 Copyright (C) 2004-2007 Anders Hedstrom
8 This library is made available under the terms of the GNU GPL.
10 If you would like to use this library in a closed-source application,
11 a separate license agreement is available. For information about
12 the closed-source license agreement for the C++ sockets library,
13 please visit http://www.alhem.net/Sockets/license.html and/or
14 email license@alhem.net.
16 This program is free software; you can redistribute it and/or
17 modify it under the terms of the GNU General Public License
18 as published by the Free Software Foundation; either version 2
19 of the License, or (at your option) any later version.
21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
30 #ifndef _SOCKETS_Thread_H
31 #define _SOCKETS_Thread_H
33 #include "sockets-config.h"
34 #ifdef SOCKETS_NAMESPACE
35 namespace SOCKETS_NAMESPACE {
36 #endif
38 #ifdef _WIN32
39 // to be
40 //typedef DWORD threadfunc_t;
41 //typedef LPVOID threadparam_t;
42 //#define STDPREFIX WINAPI
43 typedef unsigned threadfunc_t;
44 typedef void * threadparam_t;
45 #define STDPREFIX __stdcall
46 #else
47 #include <pthread.h>
49 typedef void * threadfunc_t;
50 typedef void * threadparam_t;
51 #define STDPREFIX
52 #endif
54 /** \defgroup threading Threading */
55 /** Thread base class.
56 The Thread class is used by the resolver (ResolvServer) and running a detached socket (SocketThread).
57 When you know some processing will take a long time and will freeze up a socket, there is always the
58 possibility to call Detach() on that socket before starting the processing.
59 When the OnDetached() callback is later called the processing can continue, now in its own thread.
60 \ingroup threading */
61 class Thread
63 public:
64 Thread(bool release = true);
65 virtual ~Thread();
67 static threadfunc_t STDPREFIX StartThread(threadparam_t);
69 virtual void Run() = 0;
71 bool IsRunning();
72 void SetRunning(bool x);
73 bool IsReleased();
74 void SetRelease(bool x);
75 bool DeleteOnExit();
76 void SetDeleteOnExit(bool x = true);
77 bool IsDestructor();
79 private:
80 Thread(const Thread& ) {}
81 Thread& operator=(const Thread& ) { return *this; }
82 #ifdef _WIN32
83 HANDLE m_thread;
84 unsigned m_dwThreadId;
85 #else
86 pthread_t m_thread;
87 #endif
88 bool m_running;
89 bool m_release;
90 bool m_b_delete_on_exit;
91 bool m_b_destructor;
95 #ifdef SOCKETS_NAMESPACE
97 #endif
99 #endif // _SOCKETS_Thread_H