DirectedThreadPoolQueue.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:3k
源码类别:

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : DirectedThreadPoolQueue.h
  3. Purpose: Interface for an MFC class which implements a Pseudo IOCP like class which also 
  4.          supports a "Directed" request to the IOCP. i.e. the request is for a specific thread 
  5.          in the thread pool (which is the normal use of a Directed IOCP) instead of a 
  6.          "Non-Directed" request which can be picked up by any thread in the thread pool.
  7. Created: PJN / 16-04-2002
  8. Copyright (c) 2002 - 2005 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com)
  9. All rights reserved.
  10. Copyright / Usage Details:
  11. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  12. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  13. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  14. code with your application, then you are only allowed to distribute versions released by the author. This is 
  15. to maintain a single distribution point for the source code. 
  16. */
  17. ///////////////////// Defines /////////////////////////////////////////////////
  18. #ifndef __DIRECTEDTHREADPOOLQUEUE_H__
  19. #define __DIRECTEDTHREADPOOLQUEUE_H__
  20. #ifndef THRDPOOL_EXT_CLASS
  21. #define THRDPOOL_EXT_CLASS
  22. #endif
  23. ///////////////////// Includes ////////////////////////////////////////////////
  24. #include "ThrdPool.h"
  25. typedef CArray<CThreadPoolRequest, CThreadPoolRequest&> CDirectedThreadPoolRequestArray;
  26. //Class which implements a "Directed" IO Completion Port like queue
  27. class THRDPOOL_EXT_CLASS CDirectedThreadPoolQueue : public CThreadPoolQueue
  28. {
  29. public:
  30. //Constructors / Destructors
  31.   CDirectedThreadPoolQueue();
  32.   virtual ~CDirectedThreadPoolQueue(); 
  33. //Methods
  34.   virtual BOOL Create(DWORD dwMaxQSize);
  35.   virtual BOOL Close();
  36.   virtual BOOL PostRequest(const CThreadPoolRequest& request, DWORD dwMilliseconds);
  37.   virtual BOOL PostRequestWithoutLimitCheck(const CThreadPoolRequest& request);
  38.   virtual BOOL GetRequest(CThreadPoolRequest& request, int nThreadIndexForDirectedRequest, DWORD dwMilliseconds = INFINITE);
  39.   virtual BOOL IsCreated() const;
  40. #if (_MFC_VER >= 0x700)
  41.   INT_PTR GetDirectedRequestIndexToRemove(int nThreadIndexForDirectedRequest);
  42. #else
  43.   int GetDirectedRequestIndexToRemove(int nThreadIndexForDirectedRequest);
  44. #endif
  45.   virtual int  GetNonDirectedRequestIndexToRemove();
  46.   virtual BOOL SupportsDirectedRequests() const { return TRUE; };
  47.   CDirectedThreadPoolRequestArray& GetRequestArray() { return m_Requests; };  
  48. protected:
  49.   DECLARE_DYNCREATE(CDirectedThreadPoolQueue)
  50. //Member variables
  51.   HANDLE                          m_hPostRequestSemaphore; //Semaphore which is used to implement synchronisation in "PostRequest"
  52.   HANDLE                          m_hGetRequestSemaphore;  //Semaphore which is used to implement synchronisation in "GetRequest"
  53.   CCriticalSection                m_csRequests;            //Serializes access to the Q
  54.   CDirectedThreadPoolRequestArray m_Requests;              //The request list
  55.   CArray<HANDLE, HANDLE>          m_PostRequestSemaphores; //Array of semaphores used for signalling when a directed request is available
  56.   CArray<HANDLE, HANDLE>          m_GetRequestSemaphores;  //Array of semaphores used for signalling when a directed request is available
  57. };
  58. #endif //__DIRECTEDTHREADPOOLQUEUE_H__