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)
23 void Win32ThreadEngine::Create(Thread* thread_to_init)
25 HANDLE* MyThread = new HANDLE;
28 if (!(*MyThread = CreateThread(NULL,0,Win32ThreadEngine::Entry,this,0,&ThreadId)))
31 throw CoreException(std::string("Unable to reate new Win32ThreadEngine: ") + dlerror());
34 NewThread = thread_to_init;
35 NewThread->Creator = this;
36 NewThread->Extend("winthread", MyThread);
39 Win32ThreadEngine::~Win32ThreadEngine()
43 void Win32ThreadEngine::Run()
48 bool Win32ThreadEngine::Mutex(bool enable)
51 EnterCriticalSection(&MyMutex);
53 LeaveCriticalSection(&MyMutex);
58 DWORD WINAPI Win32ThreadEngine::Entry(void* parameter)
60 ThreadEngine * pt = (ThreadEngine*)parameter;
65 void Win32ThreadEngine::FreeThread(Thread* thread)
67 HANDLE* winthread = NULL;
68 if (thread->GetExt("winthread", winthread))
70 thread->SetExitFlag();
71 WaitForSingleObject(*winthread,INFINITE);