RANDOM.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // Random.h : Declaration of the CRandom
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12. #include "connres.h"       // main symbols
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CRandom
  15. const int nMaxSessions = 10;
  16. class CRandom :
  17. public IDispatchImpl<IRandom, &IID_IRandom, &LIBID_CONNECTLib>,
  18. public IConnectionPointContainerImpl<CRandom>,
  19. public IConnectionPointImpl<CRandom, &IID_IRandomEvent, CComDynamicUnkArray>,
  20. public ISupportErrorInfo,
  21. public CComObjectRoot,
  22. public CComCoClass<CRandom,&CLSID_CoRandom>
  23. {
  24. public:
  25. CRandom()
  26. {
  27. memset(m_rsArray, 0, nMaxSessions*sizeof(RandomSessionData));
  28. }
  29. ~CRandom();
  30. BEGIN_COM_MAP(CRandom)
  31. COM_INTERFACE_ENTRY2(IDispatch, IRandom)
  32. COM_INTERFACE_ENTRY(IRandom)
  33. COM_INTERFACE_ENTRY(ISupportErrorInfo)
  34. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  35. END_COM_MAP()
  36. //  DECLARE_NOT_AGGREGATABLE(CRandom)
  37. // Remove the comment from the line above if you don't want your object to
  38. // support aggregation.  The default is to support it
  39. DECLARE_REGISTRY_RESOURCEID(IDR_Random)
  40. // Connection Point
  41. BEGIN_CONNECTION_POINT_MAP(CRandom)
  42. CONNECTION_POINT_ENTRY(IID_IRandomEvent)
  43. END_CONNECTION_POINT_MAP()
  44. // ISupportsErrorInfo
  45. STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  46. // IRandom
  47. STDMETHOD(Start)(long* pnID);
  48. STDMETHOD(Stop)(long nID);
  49. STDMETHOD(StopAll)();
  50. // method to broadcast a call on the current connections
  51. HRESULT Fire(long  nID);
  52. // info associated to each session
  53. struct RandomSessionData
  54. {
  55. CRandom* pRandom;
  56. HANDLE m_hEvent;
  57. HANDLE m_hThread;
  58. int m_nID;
  59. };
  60. protected:
  61. RandomSessionData m_rsArray[nMaxSessions];
  62. void CreateRandomSession(RandomSessionData& rs);
  63. _ThreadModel::AutoCriticalSection m_cs;
  64. };