windows-nt/Source/XPSP1/NT/inetsrv/query/fsci/indexing/cisavtst.cxx
2020-09-26 16:20:57 +08:00

148 lines
3.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: cisavtst.cxx
//
// History: 3-18-97 srikants Created
//
//----------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#if CIDBG==1
#include <cisavtst.hxx>
#include <cicat.hxx>
CCiSaveTest::CCiSaveTest( WCHAR const * pwszSaveDir,
ICiPersistIncrFile * pICiPersistFile,
CiCat & cicat )
: _cicat(cicat),
_pICiPersistFile(pICiPersistFile),
#pragma warning( disable : 4355 ) // this used in base initialization
_thrSave( SaveThread, this, TRUE ) // create suspended
#pragma warning( default : 4355 )
{
unsigned cwc = wcslen( pwszSaveDir ) + 1;
_xwszSaveDir.Init( cwc );
RtlCopyMemory( _xwszSaveDir.GetPointer(), pwszSaveDir, cwc * sizeof WCHAR );
_pICiPersistFile->AddRef();
_fAbort = FALSE;
_evt.Reset();
_thrSave.Resume();
END_CONSTRUCTION( CCiSaveTest );
}
DWORD WINAPI CCiSaveTest::SaveThread( void * self )
{
ciDebugOut(( DEB_ERROR, "Starting Save Thread\n" ));
((CCiSaveTest *) self)->DoIt();
ciDebugOut(( DEB_ERROR, "Leaving Save Thread\n" ));
return 0;
}
void CCiSaveTest::DoIt()
{
TRY
{
DWORD dwWaitTime = 1 * 60 * 1000; // 1 minute
_evt.Wait( dwWaitTime ); // 1 minute
_evt.Reset();
dwWaitTime = 30 * 60 * 1000; // 30 minutes in milli seconds
ULONG iCount = 1;
while ( !_fAbort )
{
BOOL fFull = (iCount % 10) == 9;
iCount++;
ICiEnumWorkids * pICiEnumWorkids = 0;
IEnumString * pIEnumString = 0;
BOOL fCallerOwnsFiles;
#if 1
SCODE sc = _pICiPersistFile->Save(
_xwszSaveDir.GetPointer(),
fFull,
0, // No progress notify
&_fAbort,
&pICiEnumWorkids,
&pIEnumString,
&fFull,
&fCallerOwnsFiles );
#else
SCODE sc = S_OK;
#endif // 0
XInterface<ICiEnumWorkids> xEnumWorkids;
XInterface<IEnumString> xEnumString;
if ( SUCCEEDED(sc) )
{
xEnumWorkids.Set( pICiEnumWorkids );
xEnumString.Set( pIEnumString );
_cicat.MakeBackupOfPropStore( _xwszSaveDir.GetPointer(),
0, // IProgressNotify
_fAbort,
fFull ? 0 : pICiEnumWorkids );
ciDebugOut(( DEB_ERROR, "%s Backup of CiData succeeded\n",
fFull ? "Full" : "Incremental" ));
WCHAR * pwszFileName;
ULONG cElements;
xEnumString->Reset();
while ( S_OK == xEnumString->Next( 1, &pwszFileName, &cElements ) )
{
ciDebugOut(( DEB_ERROR, "File: (%ws) \n", pwszFileName ));
}
}
else
{
ciDebugOut(( DEB_ERROR, "%s Backup of CiData failed. Error 0x%X \n",
fFull ? "Full" : "Incremental", sc ));
}
if ( !_fAbort )
{
_evt.Wait( dwWaitTime );
_evt.Reset();
}
}
}
CATCH( CException , e )
{
ciDebugOut(( DEB_ERROR,
"Error in Save Thread. 0x%X\n",
e.GetErrorCode() ));
}
END_CATCH
_pICiPersistFile->Release();
ciDebugOut(( DEB_ERROR, "End of Save Thread\n" ));
}
#endif // CIDBG==1