123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #ifndef _SAPPROCESSING_H_
- #define _SAPPROCESSING_H_
- // SapProcessing.h : header file
- //
- #include "SapClassBasicDef.h"
- #include "SapPerformance.h"
- // Forward declarations
- class SAPCLASSBASIC_CLASS SapProCallbackInfo;
- typedef void (*SapProCallback)(SapProCallbackInfo *);
- //
- // SapProcessing class declaration
- //
- class SAPCLASSBASIC_CLASS SapProcessing : public SapManager
- {
- public:
- // Constructor/Destructor
- SapProcessing(SapBuffer *pBuffer, SapProCallback pCallback = NULL, void *pContext = NULL);
- SapProcessing(const SapProcessing &pro);
- virtual ~SapProcessing();
- SapProcessing &operator=(const SapProcessing &pro);
- // Module create/destroy
- virtual BOOL Create();
- virtual BOOL Destroy();
- // Access to implementation
- SapBuffer *GetBuffer() const { return m_pBuffers; }
- SapProCallback GetCallback() const { return m_pCallback; }
- void *GetContext() const { return m_pContext; }
- float GetTime() const { return m_Time; }
- int GetIndex() const { return m_Index; }
- int GetThreadPriority() const { return m_ThreadPriority; }
- virtual BOOL SetBuffer(SapBuffer *pBuffer);
- virtual BOOL SetCallbackInfo(SapProCallback pCallback, void *pContext);
- // Processing Control
- virtual void Init();
- virtual void Execute();
- virtual void Execute(int index);
- virtual void ExecuteNext();
- virtual BOOL IsAutoEmpty() const { return m_bAutoEmpty; }
- virtual void SetAutoEmpty(BOOL isAutoEmpty) { m_bAutoEmpty = isAutoEmpty; }
- #if COR_WIN32
- virtual void SetThreadPriority( int priority) { m_ThreadPriority= priority; if( m_hThread != NULL) ::SetThreadPriority( m_hThread, priority);}
- #else
- virtual void SetThreadPriority( int priority) { m_ThreadPriority= priority; }
- #endif
- // Obsolete methods, kept for backward compatibility
- SapBuffer *GetBuffers() const { return GetBuffer(); }
- virtual BOOL SetBuffers(SapBuffer *pBuffers) { return SetBuffer(pBuffers); }
- protected:
- void Construct(SapBuffer *pBuffer, SapProCallback pCallback, void *pContext, BOOL bAutoEmpty, int threadPriority);
- virtual BOOL Run() = 0;
- virtual void Next();
- virtual void StartTime();
- virtual void StopTime();
- static UINT WINAPI ProcessThreadProc(LPVOID lpParam);
- protected:
- // Parameters
- SapBuffer *m_pBuffers; // Reference to a buffer object
- SapProCallback m_pCallback; // Application callback function
- void *m_pContext; // Application context
- // Other variables
- SapPerformance m_Perf; // Timer object
- float m_Time; // Execution time
- BOOL m_bAutoEmpty; // TRUE to automatically empty buffers
- // Processing thread management
- int m_Index; // Index of the last processed buffer
- int m_NextIndex; // Index of the next buffer to process
- HANDLE m_hThread; // Thread handle
- int m_ThreadPriority; // Thread priority
- HANDLE m_hStartEvent; // Signaled by the thread after it is started
- HANDLE m_hExitEvent; // When signaled, causes the thread to exit
- HANDLE m_hProcessEvent; // Signaled when a buffer is ready to be processed
- HANDLE m_hIdleEvent; // Signaled by the thread when it has no work to do
- LONG m_BuffersLeft; // Number of buffers left to process by the thread
- #if !COR_WIN32
- pthread_t m_ThreadID; // Processing thread ID
- #endif
- };
- //
- // SapProCallbackInfo class declaration
- //
- class SAPCLASSBASIC_CLASS SapProCallbackInfo
- {
- public:
- SapProCallbackInfo(SapProcessing *pPro, void *context)
- { m_pPro = pPro; m_Context = context; }
- ~SapProCallbackInfo() {}
- // Obsolete constructor
- SapProCallbackInfo(void *context)
- { m_pPro = NULL; m_Context = context; }
- SapProcessing *GetProcessing() const { return m_pPro; }
- void *GetContext() const { return m_Context; }
- protected:
- SapProcessing *m_pPro;
- void *m_Context;
- };
- #endif // _SAPPROCESSING_H_
|