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

📄 arwinthread_t.cpp

📁 wangchuanDll.rar 网络传输的DLL 源代码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include "ArWinThread_T.h"
#include <process.h>

//---------------------------------------------------------------------------

HANDLE	 ArWinThread_T::m_hHeap = NULL;
ArWinThreadPool_T* ArWinThread_T::m_ThreadPool = NULL;
//---------------------------------------------------------------------------

ArWinThread_T::ArWinThread_T(ArWinThreadPool_T* pThreadPool)
{
    m_ulThread = _beginthreadex(NULL, 0, ThreadProc,(void*) this, CREATE_SUSPENDED, &m_uiThreadID);
    m_ThreadPool = pThreadPool;

    m_bThreadRun = false;
    m_bProcessed = true;
    m_pThreadFunc = NULL;
    m_bFuncIsCycle = false;
    m_bExitThread = false;
};
//---------------------------------------------------------------------------

ArWinThread_T::~ArWinThread_T()
{
    if(false == m_bProcessed)
    {
        ::TerminateThread((void*)m_ulThread, 0);
    }  
};
//---------------------------------------------------------------------------

unsigned int __stdcall  ArWinThread_T::ThreadProc(void* pPara)
{
    ArWinThread_T* pParent = (ArWinThread_T*)pPara;
    while(true)
    {
        if(pParent->m_bExitThread)
        {
            break;
        }
        pParent->m_bProcessed = false;
        if(pParent->m_pThreadFunc)
        {
            pParent->m_pThreadFunc(pParent->m_pThreadPara);
        }
        pParent->m_bProcessed = true;
        if(m_ThreadPool)
        {
            m_ThreadPool->Free(pParent);
        }
        ::SuspendThread((void*)pParent->m_ulThread);
    }
    return 0;
}
//---------------------------------------------------------------------------

bool  __stdcall ArWinThread_T::SetFunc(PFunc Func)
{
    if(m_bProcessed)
    {
        m_pThreadFunc = Func;
        return true;
    }
    return false;
}
//---------------------------------------------------------------------------

unsigned long __stdcall  ArWinThread_T::Resume(void* pPara)
{
    m_bThreadRun = true;
    if(false == m_bProcessed)
    {
        return 0;
    }
    m_pThreadPara = pPara;
    m_dwStartTime = ::GetTickCount();
    ::ResumeThread((void*)m_ulThread);
    return m_ulThread;
};
//---------------------------------------------------------------------------

unsigned long __stdcall ArWinThread_T::Suspend(void)
{
    if(m_bThreadRun)
    {
        ::SuspendThread((void*)m_ulThread);
        return m_ulThread;
    }
    return 0;
}
//---------------------------------------------------------------------------

int   __stdcall ArWinThread_T::SetPriority(ArThrdLv lv)
{

    return 0;
};
//---------------------------------------------------------------------------

bool  __stdcall ArWinThread_T::Initial(void)
{

    return false;
}
//---------------------------------------------------------------------------

void  __stdcall ArWinThread_T::Destory(void)
{
    delete this;
}
//---------------------------------------------------------------------------

void* ArWinThread_T::operator new (size_t size)
{
    void* pData = ::HeapAlloc(m_hHeap, 0,size);
    return(pData);
}
//---------------------------------------------------------------------------

void ArWinThread_T::operator delete( void* pData, size_t size )
{
    ::HeapFree(m_hHeap, 0, pData);
}
//---------------------------------------------------------------------------

bool ArWinThread_T::DestroyHeap(void)
{
    if(::HeapDestroy(m_hHeap))
	{
		return true;
	}
	else
	{
		return false;
	}
}
//---------------------------------------------------------------------------

bool ArWinThread_T::AllocateHeap(void)
{
    m_hHeap = ::HeapCreate(0, 1024, 0);
    return true;
}



⌨️ 快捷键说明

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