⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workerthread.cpp

📁 分布式坦克游戏
💻 CPP
字号:
/*****************************************************************************
*                                                                             
*   WorkerThread.cpp                                                            
*                                                                             
*   Electrical Engineering Faculty - Software Lab                             
*   Spring semester 1998                                                      
*                                                                             
*   Tanks game                                                                
*                                                                             
*   Module description: Abstract base class, defining methods to launch and 
*                       stop a worker thread. All worker threads in our
*                       application derive from this class.
*                                                                             
*   Authors: Eran Yariv - 28484475                                           
*            Moshe Zur  - 24070856                                           
*                                                                            
*                                                                            
*   Date: 23/09/98                                                           
*                                                                            
******************************************************************************/
#include <stdafx.h>
#include "WorkerThread.h"


/*------------------------------------------------------------------------------

  Function: StartWorkerThread

  Purpose:  Starts the main worker function - ThreadEntry. We make sure only a
            single instance of the thread is running.

  Input:    Pointer to the thread's params.
  Output:   None.

  Remarks:  Since we want ThreadEntry to be a virtual function, we can't start
            the thread from this function. Instead we call the static function
            InvokeThreadEntry, passing to it the pointer to our class. This way
            we can invoke the dynamically binded thread entry, and pass the 
            params (as class private members).

------------------------------------------------------------------------------*/
void 
CWorkerThread::StartWorkerThread (LPVOID pvParam)
{
    if (m_bThreadIsRunning) // Only one worker thread is handled at a time !
        return;

    m_bEndThread = FALSE;   // This flag is checked by thread, making it TRUE ends thread.
    m_pvParam = pvParam;

    CWinThread* pThread = AfxBeginThread( InvokeThreadEntry, this );

    if (pThread) 
    {
        m_hThread = pThread -> m_hThread;
        m_bThreadIsRunning = TRUE;
    }
}

/*------------------------------------------------------------------------------

  Function: EndWorkerThread

  Purpose:  Stops the thread, by changing the appropiate flag.

  Input:    bWaitForTermination : If flag is on we wait on the thread terminate
            event.
  Output:   None.

  Remarks:  In some cases, the thread main loop be blocked for a long time
            before reaching the flag. In this cases the derived class may 
            override this method in order to use their own signal to terminate.
------------------------------------------------------------------------------*/
void 
CWorkerThread::EndWorkerThread (BOOL bWaitForTermination)
{
    if (m_bThreadIsRunning)
    {
        m_bEndThread = TRUE;    // Notify thread to die
        if (bWaitForTermination)
            WaitForSingleObject ( m_hThread, INFINITE );
        m_bThreadIsRunning = FALSE;
    }
}

/*------------------------------------------------------------------------------

  Function: InvokeThreadEntry

  Purpose:  Static function passed to AfxBeginThread. It's purpose is to invoke
            the working thread main loop - ThreadEntry.

  Input:    pvParam : Pointer to the derived class.
  Output:   None.

  Remarks:  See explanation at StartWorkerThread.
------------------------------------------------------------------------------*/
UINT 
CWorkerThread::InvokeThreadEntry (LPVOID pvParam)
{
    CWorkerThread *pWorkerThread = (CWorkerThread*)pvParam;

    return pWorkerThread ? pWorkerThread -> ThreadEntry (pWorkerThread -> m_pvParam)
        : 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -