You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
3.6 KiB
C++
167 lines
3.6 KiB
C++
//
|
|
// ############################################################################
|
|
// # G A M E.O.N.E - LOW LEVEL LIB V1.0 #
|
|
// ############################################################################
|
|
// Copyright (C) 2001 LEVEL ONE ENTERTAINMENT,
|
|
//
|
|
// This library is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU Lesser General Public
|
|
// License as published by the Free Software Foundation; either
|
|
// version 2.1 of the License, or any later version.
|
|
//
|
|
// This library 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
|
|
// Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this library; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
// Libhome <http://lowlevellib.sourceforge.net>
|
|
// Contact <mailto:alex.piko@l-e-v-e-l-o-n-e.com>
|
|
//
|
|
//:-----------------------------------------------------------------------------
|
|
// Modification History:
|
|
// 03 Sep 2001, Alex Piko -- Generated 23:51:08 by Genitor OCS V4.50.915.2
|
|
//
|
|
//:-----------------------------------------------------------------------------
|
|
|
|
//:Custom
|
|
#define WIN32_LEAN_AND_MEAN
|
|
//:End Custom
|
|
|
|
//:ClassInc
|
|
#include "sys_thread.h"
|
|
|
|
//:Include
|
|
#include <windows.h>
|
|
#define SYS_PLATFORM_WIN32_GDI
|
|
#include <lowlevellib.h>
|
|
|
|
//:> +-----------------------------------+
|
|
//:>-------------------| Local Function Declarations |--------------------
|
|
//:> +-----------------------------------+
|
|
|
|
//::1
|
|
// +----------------+
|
|
// | ThreadFunc() |
|
|
// +----------------+
|
|
|
|
static DWORD WINAPI ThreadFunc(
|
|
LPVOID Param);
|
|
|
|
//:> +----------------------------------+
|
|
//:>--------------------| Local Function Definitions |--------------------
|
|
//:> +----------------------------------+
|
|
|
|
//::1
|
|
// +----------------+
|
|
// | ThreadFunc() |
|
|
// +----------------+
|
|
|
|
static DWORD WINAPI ThreadFunc(
|
|
LPVOID Param)
|
|
{
|
|
sys_CThread *Thread = (sys_CThread*)Param;
|
|
SYS_ASSERT_PTR(Thread);
|
|
DWORD rc = Thread->Main();
|
|
delete Thread;
|
|
return(rc);
|
|
}
|
|
|
|
//:> +-----------------------------------+
|
|
//:>-------------------| Member Function Definitions |--------------------
|
|
//:> +-----------------------------------+
|
|
|
|
//::8
|
|
// +---------------+
|
|
// | Constructor |
|
|
// +---------------+
|
|
|
|
sys_CThread::sys_CThread()
|
|
{
|
|
Create();
|
|
}
|
|
|
|
//::2
|
|
// +--------------+
|
|
// | Destructor |
|
|
// +--------------+
|
|
|
|
sys_CThread::~sys_CThread()
|
|
{
|
|
if(m_hThread)
|
|
{
|
|
::WaitForSingleObject(m_hThread, INFINITE);
|
|
::CloseHandle(m_hThread);
|
|
}
|
|
}
|
|
|
|
//::6
|
|
// +----------+
|
|
// | Main() |
|
|
// +----------+
|
|
|
|
int sys_CThread::Main()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
//::4
|
|
// +------------+
|
|
// | Resume() |
|
|
// +------------+
|
|
|
|
void sys_CThread::Resume()
|
|
{
|
|
if( m_hThread == 0 )
|
|
Create();
|
|
::ResumeThread(m_hThread);
|
|
}
|
|
|
|
//::3
|
|
// +-------------+
|
|
// | Suspend() |
|
|
// +-------------+
|
|
|
|
void sys_CThread::Suspend()
|
|
{
|
|
if(m_hThread)
|
|
{
|
|
::SuspendThread(m_hThread);
|
|
}
|
|
}
|
|
|
|
//::5
|
|
// +---------------+
|
|
// | Terminate() |
|
|
// +---------------+
|
|
|
|
void sys_CThread::Terminate()
|
|
{
|
|
if(m_hThread)
|
|
{
|
|
::TerminateThread(m_hThread,0);
|
|
::CloseHandle(m_hThread);
|
|
m_hThread = 0;
|
|
}
|
|
}
|
|
|
|
|
|
// +------------+
|
|
// | Create() |
|
|
// +------------+
|
|
|
|
void sys_CThread::Create()
|
|
{
|
|
DWORD ThreadId;
|
|
m_hThread = ::CreateThread(NULL, 0, &ThreadFunc, this,
|
|
CREATE_SUSPENDED, &ThreadId);
|
|
|
|
SYS_ASSERT(m_hThread!=0);
|
|
}
|
|
|
|
|
|
|