103 lines
2.6 KiB
C++
103 lines
2.6 KiB
C++
|
//---------------------------------------------------------------------------
|
||
|
// Globals.cpp : Global information
|
||
|
//
|
||
|
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
|
||
|
// Developed by Sheridan Software Systems, Inc.
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
SZTHISFILE
|
||
|
|
||
|
// our global memory allocator and global memory pool
|
||
|
//
|
||
|
HANDLE g_hHeap;
|
||
|
LPMALLOC g_pMalloc;
|
||
|
HINSTANCE g_hinstance;
|
||
|
|
||
|
//Count number of objects and number of locks.
|
||
|
ULONG g_cLockCount=0;
|
||
|
ULONG g_cObjectCount=0;
|
||
|
|
||
|
CRITICAL_SECTION g_CriticalSection;
|
||
|
|
||
|
// frequently used large integers
|
||
|
//
|
||
|
LARGE_INTEGER g_liMinus = {(ULONG)-1, -1}; // minus one
|
||
|
LARGE_INTEGER g_liZero = {0, 0}; // - zero -
|
||
|
LARGE_INTEGER g_liPlus = {0, 1}; // plus one
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// VDInitGlobals
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// Initialize global variables
|
||
|
//
|
||
|
// Parameters:
|
||
|
// hinstResource - [in] The instance handle that contains resource strings
|
||
|
//
|
||
|
// Output:
|
||
|
// TRUE if successful otherwise FALSE
|
||
|
//
|
||
|
BOOL VDInitGlobals(HINSTANCE hinstance)
|
||
|
{
|
||
|
g_pMalloc = NULL;
|
||
|
g_hinstance = hinstance;
|
||
|
g_hHeap = GetProcessHeap();
|
||
|
if (!g_hHeap)
|
||
|
{
|
||
|
FAIL("Couldn't get Process Heap.");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
InitializeCriticalSection(&g_CriticalSection);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// VDReleaseGlobals
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
//
|
||
|
void VDReleaseGlobals()
|
||
|
{
|
||
|
if (g_pMalloc)
|
||
|
{
|
||
|
g_pMalloc->Release();
|
||
|
g_pMalloc = NULL;
|
||
|
}
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
DumpObjectCounters();
|
||
|
#endif // _DEBUG
|
||
|
|
||
|
DeleteCriticalSection(&g_CriticalSection);
|
||
|
|
||
|
}
|
||
|
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
// VDUpdateObjectCount increments/decrements global object count
|
||
|
//=--------------------------------------------------------------------------=
|
||
|
//
|
||
|
void VDUpdateObjectCount(int cChange)
|
||
|
{
|
||
|
|
||
|
EnterCriticalSection(&g_CriticalSection);
|
||
|
|
||
|
g_cObjectCount += cChange;
|
||
|
|
||
|
// get global malloc pointer object count greater than zero
|
||
|
if (!g_pMalloc && g_cObjectCount > 0)
|
||
|
{
|
||
|
CoGetMalloc(MEMCTX_TASK, &g_pMalloc);
|
||
|
}
|
||
|
else
|
||
|
// release hold on global malloc pointer when no more objects
|
||
|
if (0 == g_cObjectCount && g_pMalloc)
|
||
|
{
|
||
|
g_pMalloc->Release();
|
||
|
g_pMalloc = NULL;
|
||
|
}
|
||
|
|
||
|
LeaveCriticalSection(&g_CriticalSection);
|
||
|
|
||
|
}
|