| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* MtCoder.h -- Multi-thread Coder
- 2009-11-19 : Igor Pavlov : Public domain */
- #ifndef __MT_CODER_H
- #define __MT_CODER_H
- #include "Threads.h"
- EXTERN_C_BEGIN
- typedef struct
- {
- CThread thread;
- CAutoResetEvent startEvent;
- CAutoResetEvent finishedEvent;
- int stop;
-
- THREAD_FUNC_TYPE func;
- LPVOID param;
- THREAD_FUNC_RET_TYPE res;
- } CLoopThread;
- void LoopThread_Construct(CLoopThread *p);
- void LoopThread_Close(CLoopThread *p);
- WRes LoopThread_Create(CLoopThread *p);
- WRes LoopThread_StopAndWait(CLoopThread *p);
- WRes LoopThread_StartSubThread(CLoopThread *p);
- WRes LoopThread_WaitSubThread(CLoopThread *p);
- #ifndef _7ZIP_ST
- #define NUM_MT_CODER_THREADS_MAX 32
- #else
- #define NUM_MT_CODER_THREADS_MAX 1
- #endif
- typedef struct
- {
- UInt64 totalInSize;
- UInt64 totalOutSize;
- ICompressProgress *progress;
- SRes res;
- CCriticalSection cs;
- UInt64 inSizes[NUM_MT_CODER_THREADS_MAX];
- UInt64 outSizes[NUM_MT_CODER_THREADS_MAX];
- } CMtProgress;
- SRes MtProgress_Set(CMtProgress *p, unsigned index, UInt64 inSize, UInt64 outSize);
- struct _CMtCoder;
- typedef struct
- {
- struct _CMtCoder *mtCoder;
- Byte *outBuf;
- size_t outBufSize;
- Byte *inBuf;
- size_t inBufSize;
- unsigned index;
- CLoopThread thread;
- Bool stopReading;
- Bool stopWriting;
- CAutoResetEvent canRead;
- CAutoResetEvent canWrite;
- } CMtThread;
- typedef struct
- {
- SRes (*Code)(void *p, unsigned index, Byte *dest, size_t *destSize,
- const Byte *src, size_t srcSize, int finished);
- } IMtCoderCallback;
- typedef struct _CMtCoder
- {
- size_t blockSize;
- size_t destBlockSize;
- unsigned numThreads;
-
- ISeqInStream *inStream;
- ISeqOutStream *outStream;
- ICompressProgress *progress;
- ISzAlloc *alloc;
- IMtCoderCallback *mtCallback;
- CCriticalSection cs;
- SRes res;
- CMtProgress mtProgress;
- CMtThread threads[NUM_MT_CODER_THREADS_MAX];
- } CMtCoder;
- void MtCoder_Construct(CMtCoder* p);
- void MtCoder_Destruct(CMtCoder* p);
- SRes MtCoder_Code(CMtCoder *p);
- EXTERN_C_END
- #endif
|