home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / mtmdi.pak / MTBOUNCE.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  3KB  |  102 lines

  1. // mtbounce.cpp : Implements the user interface thread for the
  2. //                bounce window.
  3. //
  4. // This is a part of the Microsoft Foundation Classes C++ library.
  5. // Copyright (C) 1992-1995 Microsoft Corporation
  6. // All rights reserved.
  7. //
  8. // This source code is only intended as a supplement to the
  9. // Microsoft Foundation Classes Reference and related
  10. // electronic documentation provided with the library.
  11. // See these sources for detailed information regarding the
  12. // Microsoft Foundation Classes product.
  13.  
  14. #include "stdafx.h"
  15. #include "bounce.h"
  16. #include "mtbounce.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char BASED_CODE THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. // A single global event handle is used to synchronize the termination
  24. // of the application and the termination of bounce threads.  This
  25. // synchronization avoids false memory leak detection of CBounceThread
  26. // objects that did not have time to be auto-destroyed before the
  27. // application terminates.
  28. //
  29. // The reason that m_hEventBounceThreadKilled cannot be a per-object member
  30. // variable of the CBounceThread object is because the event handle must
  31. // be referred to by the delete operator.   By the time the delete operator
  32. // is called, the member variable no longer can be referenced.  The reason
  33. // that it is permissable to use a global event, instead of per thread events,
  34. // is that each CBounceWnd window is destroyed in sequence, one after another.
  35. // Therefore, each CBounceThread is destroyed in sequence, one after another.
  36.  
  37. HANDLE CBounceThread::m_hEventBounceThreadKilled;
  38.  
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CBounceThread
  41.  
  42. IMPLEMENT_DYNCREATE(CBounceThread, CWinThread)
  43.  
  44. CBounceThread::CBounceThread()
  45. {
  46. }
  47.  
  48. CBounceThread::CBounceThread(HWND hwndParent) : m_hwndParent(hwndParent)
  49. {
  50. }
  51.  
  52. CBounceThread::~CBounceThread()
  53. {
  54. }
  55.  
  56. void CBounceThread::operator delete(void* p)
  57. {
  58.     // The exiting main application thread waits for this event before completely
  59.     // terminating in order to avoid a false memory leak detection.  See also
  60.     // CBounceWnd::OnNcDestroy in bounce.cpp.
  61.  
  62.     SetEvent(m_hEventBounceThreadKilled);
  63.  
  64.     CWinThread::operator delete(p);
  65. }
  66.  
  67. int CBounceThread::InitInstance()
  68. {
  69.     CWnd* pParent = CWnd::FromHandle(m_hwndParent);
  70.     CRect rect;
  71.     pParent->GetClientRect(&rect);
  72.  
  73.     BOOL bReturn = m_wndBounce.Create(_T("BounceMTChildWnd"),
  74.         WS_CHILD | WS_VISIBLE, rect, pParent);
  75.  
  76.     // It is important to set CWinThread::m_pMainWnd to the user interface
  77.     // window.  This is required so that when the m_pMainWnd is destroyed,
  78.     // the CWinThread is also automatically destroyed.  For insight into
  79.     // how the CWinThread is automatically destroyed when the m_pMainWnd
  80.     // window is destroyed, see the implementation of CWnd::OnNcDestroy
  81.     // in wincore.cpp of the MFC sources.
  82.  
  83.     if (bReturn)
  84.         m_pMainWnd = &m_wndBounce;
  85.  
  86.     return bReturn;
  87. }
  88.  
  89. int CBounceThread::ExitInstance()
  90. {
  91.     return CWinThread::ExitInstance();
  92. }
  93.  
  94. BEGIN_MESSAGE_MAP(CBounceThread, CWinThread)
  95.     //{{AFX_MSG_MAP(CBounceThread)
  96.         // NOTE - the ClassWizard will add and remove mapping macros here.
  97.     //}}AFX_MSG_MAP
  98. END_MESSAGE_MAP()
  99.  
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CBounceThread message handlers
  102.