1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * InspIRCd: (C) 2002-2008 InspIRCd Development Team
6 * See: http://www.inspircd.org/wiki/index.php/Credits
8 * This program is free but copyrighted software; see
9 * the file COPYING for details.
11 * ---------------------------------------------------
15 #include "threadengines/threadengine_win32.h"
17 CRITICAL_SECTION MyMutex;
19 Win32ThreadEngine::Win32ThreadEngine(InspIRCd* Instance) : ThreadEngine(Instance)
21 InitializeCriticalSection(&MyMutex);
24 void Win32ThreadEngine::Create(Thread* thread_to_init)
27 HANDLE* MyThread = new HANDLE;
30 if (!(*MyThread = CreateThread(NULL,0,Win32ThreadEngine::Entry,this,0,&ThreadId)))
34 throw CoreException(std::string("Unable to reate new Win32ThreadEngine: ") + dlerror());
36 NewThread = thread_to_init;
37 NewThread->Creator = this;
38 NewThread->Extend("winthread", MyThread);
42 Win32ThreadEngine::~Win32ThreadEngine()
44 DeleteCriticalSection(&MyMutex);
47 void Win32ThreadEngine::Run()
52 bool Win32ThreadEngine::Mutex(bool enable)
55 EnterCriticalSection(&MyMutex);
57 LeaveCriticalSection(&MyMutex);
62 DWORD WINAPI Win32ThreadEngine::Entry(void* parameter)
64 ThreadEngine * pt = (ThreadEngine*)parameter;
69 void Win32ThreadEngine::FreeThread(Thread* thread)
71 HANDLE* winthread = NULL;
72 if (thread->GetExt("winthread", winthread))
74 thread->SetExitFlag();
75 WaitForSingleObject(*winthread,INFINITE);