From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Dbx_tree/Thread.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 plugins/Dbx_tree/Thread.h (limited to 'plugins/Dbx_tree/Thread.h') diff --git a/plugins/Dbx_tree/Thread.h b/plugins/Dbx_tree/Thread.h new file mode 100644 index 0000000000..09b0b6c016 --- /dev/null +++ b/plugins/Dbx_tree/Thread.h @@ -0,0 +1,77 @@ +/* + +dbx_tree: tree database driver for Miranda IM + +Copyright 2007-2010 Michael "Protogenes" Kunz, + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#pragma once + +#include +#include +#include "sigslot.h" +#include "stdint.h" + +class CThread +{ +private: + uint32_t volatile m_Terminated; + uint32_t volatile m_FreeOnTerminate; + uint32_t volatile m_Finished; + uint32_t volatile m_Suspended; + uint32_t volatile m_ReturnValue; +protected: + HANDLE m_Handle; + unsigned int m_ThreadID; + + void ReturnValue(DWORD Value); + virtual void Execute() = 0; +public: + CThread(bool CreateSuspended); + virtual ~CThread(); + + DWORD Wrapper(); + + void Resume(); + void Suspend(); + void Terminate(); + DWORD WaitFor(); + + bool Suspended() {return m_Suspended != 0;}; + bool Terminated() {return m_Terminated != 0;}; + bool FreeOnTerminate() {return m_FreeOnTerminate != 0;}; + void FreeOnTerminate(bool Terminate); + DWORD ReturnValue() {return m_ReturnValue;}; + + typedef enum TPriority { + tpIdle = THREAD_PRIORITY_IDLE, + tpLowest = THREAD_PRIORITY_LOWEST, + tpLower = THREAD_PRIORITY_BELOW_NORMAL, + tpNormal = THREAD_PRIORITY_NORMAL, + tpHigher = THREAD_PRIORITY_ABOVE_NORMAL, + tpHighest = THREAD_PRIORITY_HIGHEST, + tpRealTime = THREAD_PRIORITY_TIME_CRITICAL + } TPriority; + + void Priority(TPriority NewPriority); + TPriority Priority(); + + typedef sigslot::signal1 TOnTerminate; + TOnTerminate m_sigTerminate; + TOnTerminate & sigTerminate() {return m_sigTerminate;}; +}; -- cgit v1.2.3