CRunner.cpp
资源名称:10-Race.rar [点击查看]
上传用户:bkierde
上传日期:2022-06-07
资源大小:1840k
文件大小:2k
源码类别:
其他游戏
开发平台:
Visual C++
- /* -------------------------------------------------------------------------
- // 文件名 : Race/CRunner.cpp
- // 创建者 : 朱洪波
- // 创建时间 : 2007-10-15 13:51:58
- // 功能描述 :
- //
- // -----------------------------------------------------------------------*/
- #include "stdafx.h"
- #include "CRunner.h"
- // -------------------------------------------------------------------------
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- // -------------------------------------------------------------------------
- //赛跑的总长度为100米
- int CRunner::lenght=100;
- //构造函数
- CRunner::CRunner()
- {
- memset(&m_stVar,0,sizeof(StThreadVar));
- m_pThread=0;
- }
- //析构函数
- CRunner::~CRunner()
- {
- }
- void CRunner::start(StThreadVar& st)
- {
- if(!m_pThread)
- {
- memcpy(&m_stVar,&st,sizeof(StThreadVar));
- //传递this指针作为线程的执行参数
- m_pThread=::AfxBeginThread(CRunner::thread_main,this);
- }
- }
- UINT CRunner::thread_main(LPVOID ptr)
- {
- //安全性检查
- if(ptr)
- {
- //调用成员函数作为线程的执行体
- CRunner* runner=(CRunner*)ptr;
- runner->run();
- }
- return 0;
- }
- void CRunner::run()
- {
- int iStep=0;
- BOOL start=FALSE;
- while (TRUE)
- {
- //等待发令枪,预备状态
- DWORD dr=::WaitForSingleObject(this->m_stVar.hTag,INFINITE);
- //枪响,开始赛跑
- dr=::WaitForSingleObject(this->m_stVar.hExit,0);
- if(dr==WAIT_TIMEOUT)
- {
- iStep++;
- //运动员还没有到终点
- if(iStep<=CRunner::lenght)
- {
- //发送消息表示自己的位置
- this->m_stVar.pWnd->SendMessage(WM_USER+1000,this->m_stVar.index,iStep);
- //一下代码为产生一个0-400的随机数字,决定线程的阻塞时间
- //由此决定了各个运动员的速度变化不一
- srand(GetTickCount());
- int i=rand()%400;
- Sleep(i);
- }
- //运动员到达终点
- else
- {
- this->m_stVar.pWnd->SendMessage(WM_USER+1001,0,0);
- return;
- }
- }
- //结束比赛信号发出,终止比赛
- else if (dr==WAIT_OBJECT_0)
- {
- return;
- }
- //意外处理
- else if(dr=WAIT_FAILED)
- {
- return;
- }
- else
- {
- return;
- }
- }
- }
- // -------------------------------------------------------------------------