#include "inspircd_config.h"
#include "base.h"
-class InspIRCd;
class Thread;
/** The ThreadEngine class has the responsibility of initialising
* access non-threadsafe code from a Thread, use the Mutex class to wrap
* access to the code carefully.
*/
-class CoreExport ThreadEngine : public Extensible
+class CoreExport ThreadEngine
{
public:
- ThreadEngine(InspIRCd* Instance);
+ ThreadEngine();
virtual ~ThreadEngine();
private:
CRITICAL_SECTION wutex;
public:
- Win32Mutex()
+ Mutex()
{
InitializeCriticalSection(&wutex);
}
{
LeaveCriticalSection(&wutex);
}
- ~Win32Mutex()
+ ~Mutex()
{
DeleteCriticalSection(&wutex);
}
};
+class ThreadQueueData
+{
+ CRITICAL_SECTION mutex;
+ HANDLE event;
+ public:
+ ThreadQueueData()
+ {
+ InitializeCriticalSection(&mutex);
+ event = CreateEvent(NULL, false, false, NULL);
+ }
+
+ ~ThreadQueueData()
+ {
+ DeleteCriticalSection(&mutex);
+ }
+
+ void Lock()
+ {
+ EnterCriticalSection(&mutex);
+ }
+
+ void Unlock()
+ {
+ LeaveCriticalSection(&mutex);
+ }
+
+ void Wakeup()
+ {
+ PulseEvent(event);
+ }
+
+ void Wait()
+ {
+ LeaveCriticalSection(&mutex);
+ WaitForSingleObject(event, INFINITE);
+ EnterCriticalSection(&mutex);
+ }
+};
+
+class ThreadSignalData
+{
+ public:
+ int connFD;
+ ThreadSignalData()
+ {
+ connFD = -1;
+ }
+};
+
#endif