diff options
Diffstat (limited to '7zip/Common/ProgressMt.h')
-rwxr-xr-x | 7zip/Common/ProgressMt.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/7zip/Common/ProgressMt.h b/7zip/Common/ProgressMt.h new file mode 100755 index 00000000..c0776944 --- /dev/null +++ b/7zip/Common/ProgressMt.h @@ -0,0 +1,47 @@ +// ProgressMt.h + +#ifndef __PROGRESSMT_H +#define __PROGRESSMT_H + +#include "../../Common/MyCom.h" + +#include "../ICoder.h" +#include "../IProgress.h" + +#include "Windows/Synchronization.h" +#include "../../Common/Vector.h" + +class CMtCompressProgressMixer +{ + CMyComPtr<ICompressProgressInfo> _progress; + CRecordVector<UInt64> InSizes; + CRecordVector<UInt64> OutSizes; + UInt64 TotalInSize; + UInt64 TotalOutSize; +public: + NWindows::NSynchronization::CCriticalSection CriticalSection; + void Init(int numItems, ICompressProgressInfo *progress); + void Reinit(int index); + HRESULT SetRatioInfo(int index, const UInt64 *inSize, const UInt64 *outSize); +}; + +class CMtCompressProgress: + public ICompressProgressInfo, + public CMyUnknownImp +{ + CMtCompressProgressMixer *_progress; + int _index; +public: + void Init(CMtCompressProgressMixer *progress, int index) + { + _progress = progress; + _index = index; + } + void Reinit() { _progress->Reinit(_index); } + + MY_UNKNOWN_IMP + + STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); +}; + +#endif |