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

📄 mainthread.cpp

📁 HGE 2D游戏引擎制作的一个演示
💻 CPP
字号:
#include "MainThread.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#endif

//用于回调函数
unsigned int __stdcall MainThread::RunPtr(PVOID pvoid)
{
	MainThread *pThread=(MainThread *)pvoid;

	pThread->Run();

	return 0;
}

MainThread::MainThread()
{
	m_bActive = FALSE;
	m_bEnd = FALSE;
	m_bEndDone = FALSE;

	m_bEnterCriticalSection = FALSE;

	m_dwLastFrameTime = m_dwStartTime = 0;

	//初始化临界区
	InitializeCriticalSection(&m_CS);
}

MainThread::~MainThread()
{
	DeleteCriticalSection(&m_CS);
}

BOOL MainThread::StartThread()
{
	if(!InitInstance())
		return FALSE;
	m_ThreadHandle=(HANDLE)_beginthreadex(0,0,RunPtr,this,0,&m_ThreadID);
	if(0!=m_ThreadHandle)
	{
		m_bEnd = FALSE;
		return TRUE;
	}
	return FALSE;
}


//在激活线程之前,先执行这个函数,做一些初始化工作
BOOL MainThread::InitInstance()
{
	return TRUE;
}

int MainThread::ExitInstance()
{
	return 0;
}

//线程主循环,操作系统会不断调用这个函数
//在这里主要进行轮循处理
void MainThread::Run() 
{
	while(!m_bEnd)
	{
		if(m_bActive)												//如果处于非活动状态(比如已经与数据服务器断开)
		{
			Sleep(10);												//给其他线程一次执行机会

			EnterCriticalSection(&m_CS);							//进入临界区
			m_bEnterCriticalSection = TRUE;							//确实进入临界区

			// 状态循环
			MainLoop();

			//动画时间检测,时间到了就让播放
			DWORD curtime = GetTickCount();
			if(curtime > m_dwLastFrameTime + FRAME_TIME)			//时间到,显示下一帧
			{
				OnFrameTime();
				m_dwLastFrameTime = curtime;
			}
			else if(curtime < m_dwLastFrameTime)					//如果反而比上一帧小了,说明到了49天,重新开始计算了
				m_dwLastFrameTime = curtime;


			LeaveCriticalSection(&m_CS);							//离开临界区
			m_bEnterCriticalSection = FALSE;						//确实进入临界区
		}
		else
		{
			Sleep(1000);		//不工作
			continue;
		}
	}
	ExitInstance();
	m_bEndDone = TRUE;
	_endthreadex(0);
}

//显示下一帧
void MainThread::OnFrameTime()
{
	if (g_pGUIRoot)
		g_pGUIRoot->Import_FrameDraw();
}

void MainThread::MainLoop()
{
	if (g_pGUIRoot)
		g_pGUIRoot->Import_Updata(FRAME_TIME / 1000.0f);
}


⌨️ 快捷键说明

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