You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.3 KiB
146 lines
4.3 KiB
/*****************************************************************************
|
|
|
|
|
|
|
|
* Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
|
|
|
|
*
|
|
|
|
* All Rights Reserved
|
|
|
|
*
|
|
|
|
* This software is furnished under a license and may be used and copied
|
|
|
|
* only in accordance with the terms of such license and with the inclusion
|
|
|
|
* of the above copyright notice. This software or any other copies thereof
|
|
|
|
* may not be provided or otherwise made available to any other person. No
|
|
|
|
* title to and ownership of the software is hereby transferred.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
//============================================================================
|
|
|
|
//
|
|
|
|
// CGlobal.h -- Global declarations
|
|
|
|
//
|
|
|
|
// Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// Revisions: 6/26/98 a-kevhu Created
|
|
//
|
|
//============================================================================
|
|
|
|
|
|
#ifndef __CGLOBAL_H__
|
|
#define __CGLOBAL_H__
|
|
|
|
|
|
#include <windows.h>
|
|
#include <process.h>
|
|
#include <winerror.h>
|
|
#include <stdio.h>
|
|
#include <brodcast.h>
|
|
#include <dllutils.h>
|
|
|
|
#define ERR_LOG_FILE _T("c:\\temp\\test.txt")
|
|
|
|
// forward class declarations to make the compiler happy...
|
|
class CWaitableObject;
|
|
class CWaitableCollection;
|
|
class CKernel;
|
|
class CMutex;
|
|
class CSemaphore;
|
|
class CEvent;
|
|
class CThread;
|
|
class CCriticalSec;
|
|
class CAutoLock;
|
|
class CMonitor;
|
|
class CSharedMemory;
|
|
class CMailbox;
|
|
|
|
// defined symbol determines if CThrowError throws exceptions
|
|
// or just prints debug error messages...
|
|
#ifndef __C_THROW_EXCEPTIONS__
|
|
#define __C_THROW_EXCEPTIONS__ TRUE
|
|
#endif
|
|
|
|
// for higher level objects which might have to check internal
|
|
// object status when exceptions are disabled, these macros can be useful...
|
|
|
|
// PTR is the smart pointer to check for NULL,
|
|
// STATUS is the variable in which to store an error code if an error is detected...
|
|
#if __C_THROW_EXCEPTIONS__
|
|
#define C_CHECK_AUTOPTR_OBJECT(PTR,STATUS) if ((PTR).IsNull()) { /*CThrowError(ERROR_OUTOFMEMORY);*/ LogMessage2(L"CAutoLock Error: %d", ERROR_OUTOFMEMORY); }
|
|
#else
|
|
#define C_CHECK_AUTOPTR_OBJECT(PTR,STATUS) if ((PTR).IsNull()) { (STATUS) = ERROR_OUTOFMEMORY; return; }
|
|
#endif
|
|
|
|
// SCODE is the return value to check,
|
|
// STATUS is the variable in which to store an error code if an error is detected...
|
|
#if __C_THROW_EXCEPTIONS__
|
|
#define C_CHECK_CREATION_STATUS(SCODE,STATUS) {}
|
|
#else
|
|
#define C_CHECK_CREATION_STATUS(SCODE,STATUS) if (((SCODE)!=NO_ERROR)&&((SCODE)!=ERROR_ALREADY_EXISTS)) { STATUS = (SCODE); return; }
|
|
#endif
|
|
|
|
//// error handling macro and function...
|
|
//#define CThrowError(dwStatus) CInternalThrowError((dwStatus), __FILE__, __LINE__)
|
|
//extern void CInternalThrowError( DWORD dwStatus, LPCWSTR lpFilename, int line);
|
|
|
|
// check handle for NULL and INVALID_HANDLE
|
|
inline BOOL CIsValidHandle( HANDLE hHandle) {
|
|
return ((hHandle != NULL) && (hHandle != INVALID_HANDLE_VALUE));
|
|
}
|
|
|
|
// validate wait return codes...
|
|
inline BOOL CWaitSucceeded( DWORD dwWaitResult, DWORD dwHandleCount) {
|
|
return (dwWaitResult < WAIT_OBJECT_0 + dwHandleCount);
|
|
}
|
|
|
|
inline BOOL CWaitAbandoned( DWORD dwWaitResult, DWORD dwHandleCount) {
|
|
return ((dwWaitResult >= WAIT_ABANDONED_0) &&
|
|
(dwWaitResult < WAIT_ABANDONED_0 + dwHandleCount));
|
|
}
|
|
|
|
inline BOOL CWaitTimeout( DWORD dwWaitResult) {
|
|
return (dwWaitResult == WAIT_TIMEOUT);
|
|
}
|
|
|
|
inline BOOL CWaitFailed( DWORD dwWaitResult) {
|
|
return (dwWaitResult == WAIT_FAILED);
|
|
}
|
|
|
|
// compute object indices for waits...
|
|
inline DWORD CWaitSucceededIndex( DWORD dwWaitResult) {
|
|
return (dwWaitResult - WAIT_OBJECT_0);
|
|
}
|
|
|
|
inline DWORD CWaitAbandonedIndex( DWORD dwWaitResult) {
|
|
return (dwWaitResult - WAIT_ABANDONED_0);
|
|
}
|
|
|
|
// Log messages
|
|
inline DWORD LogMsg(LPCTSTR szMsg, LPCTSTR szFileName = ERR_LOG_FILE)
|
|
{
|
|
SYSTEMTIME systime;
|
|
GetSystemTime(&systime);
|
|
{
|
|
TCHAR szTime[64];
|
|
ZeroMemory(szTime,sizeof(szTime));
|
|
wsprintf(szTime,_T("(%02d:%02d:%02d.%04d) "),systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
|
|
LogMessage3((LPCWSTR)TOBSTRT(_T("%s%s")), TOBSTRT(szTime), TOBSTRT(szMsg));
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
#endif
|
|
|
|
|