// Borland C++ Builder
// Copyright (c) 1995, 2005 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Syncobjs.pas' rev: 10.00

#ifndef SyncobjsHPP
#define SyncobjsHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member functions
#pragma pack(push,8)
#include <System.hpp>	// Pascal unit
#include <Sysinit.hpp>	// Pascal unit
#include <Windows.hpp>	// Pascal unit
#include <Messages.hpp>	// Pascal unit
#include <Sysutils.hpp>	// Pascal unit
#include <Classes.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Syncobjs
{
//-- type declarations -------------------------------------------------------
class DELPHICLASS TSynchroObject;
class PASCALIMPLEMENTATION TSynchroObject : public System::TObject 
{
	typedef System::TObject inherited;
	
public:
	virtual void __fastcall Acquire(void);
	virtual void __fastcall Release(void);
public:
	#pragma option push -w-inl
	/* TObject.Create */ inline __fastcall TSynchroObject(void) : System::TObject() { }
	#pragma option pop
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TSynchroObject(void) { }
	#pragma option pop
	
};


#pragma option push -b-
enum TWaitResult { wrSignaled, wrTimeout, wrAbandoned, wrError };
#pragma option pop

class DELPHICLASS THandleObject;
class PASCALIMPLEMENTATION THandleObject : public TSynchroObject 
{
	typedef TSynchroObject inherited;
	
protected:
	unsigned FHandle;
	int FLastError;
	bool FUseCOMWait;
	
public:
	__fastcall THandleObject(bool UseCOMWait);
	__fastcall virtual ~THandleObject(void);
	virtual TWaitResult __fastcall WaitFor(unsigned Timeout);
	__property int LastError = {read=FLastError, nodefault};
	__property unsigned Handle = {read=FHandle, nodefault};
};


class DELPHICLASS TEvent;
class PASCALIMPLEMENTATION TEvent : public THandleObject 
{
	typedef THandleObject inherited;
	
public:
	__fastcall TEvent(Windows::PSecurityAttributes EventAttributes, bool ManualReset, bool InitialState, const AnsiString Name, bool UseCOMWait)/* overload */;
	__fastcall TEvent(bool UseCOMWait)/* overload */;
	void __fastcall SetEvent(void);
	void __fastcall ResetEvent(void);
public:
	#pragma option push -w-inl
	/* THandleObject.Destroy */ inline __fastcall virtual ~TEvent(void) { }
	#pragma option pop
	
};


class DELPHICLASS TSimpleEvent;
class PASCALIMPLEMENTATION TSimpleEvent : public TEvent 
{
	typedef TEvent inherited;
	
public:
	#pragma option push -w-inl
	/* TEvent.Create */ inline __fastcall TSimpleEvent(Windows::PSecurityAttributes EventAttributes, bool ManualReset, bool InitialState, const AnsiString Name, bool UseCOMWait)/* overload */ : TEvent(EventAttributes, ManualReset, InitialState, Name, UseCOMWait) { }
	#pragma option pop
	
public:
	#pragma option push -w-inl
	/* THandleObject.Destroy */ inline __fastcall virtual ~TSimpleEvent(void) { }
	#pragma option pop
	
};


class DELPHICLASS TMutex;
class PASCALIMPLEMENTATION TMutex : public THandleObject 
{
	typedef THandleObject inherited;
	
public:
	__fastcall TMutex(bool UseCOMWait)/* overload */;
	__fastcall TMutex(Windows::PSecurityAttributes MutexAttributes, bool InitialOwner, const AnsiString Name, bool UseCOMWait)/* overload */;
	__fastcall TMutex(unsigned DesiredAccess, bool InheritHandle, const AnsiString Name, bool UseCOMWait)/* overload */;
	virtual void __fastcall Acquire(void);
	virtual void __fastcall Release(void);
public:
	#pragma option push -w-inl
	/* THandleObject.Destroy */ inline __fastcall virtual ~TMutex(void) { }
	#pragma option pop
	
};


class DELPHICLASS TCriticalSection;
class PASCALIMPLEMENTATION TCriticalSection : public TSynchroObject 
{
	typedef TSynchroObject inherited;
	
protected:
	_RTL_CRITICAL_SECTION FSection;
	
public:
	__fastcall TCriticalSection(void);
	__fastcall virtual ~TCriticalSection(void);
	virtual void __fastcall Acquire(void);
	virtual void __fastcall Release(void);
	bool __fastcall TryEnter(void);
	void __fastcall Enter(void);
	void __fastcall Leave(void);
};


//-- var, const, procedure ---------------------------------------------------

}	/* namespace Syncobjs */
using namespace Syncobjs;
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// Syncobjs
