Skip to content

Commit 281a21d

Browse files
committed
commit test
0 parents  commit 281a21d

2 files changed

Lines changed: 149 additions & 0 deletions

File tree

m2ThreadLoad.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include "stdafxM2.h"
2+
3+
//#include "m2ThreadLoad.h"
4+
5+
std::queue<StLoadData*> CLoadThreadQue::m_tqLoadData = std::queue<StLoadData*>();
6+
7+
CLoadThreadQue::CLoadThreadQue()
8+
{
9+
m_hThread = (HANDLE)_beginthreadex(NULL, 0, CLoadThreadQue::ThreadLoad, NULL, NULL, NULL);
10+
}
11+
12+
CLoadThreadQue::~CLoadThreadQue()
13+
{
14+
_endthreadex(0);
15+
}
16+
17+
void CLoadThreadQue::Push(m2::Scene* pkScene_, int nID_, MHSBYTE* pData_, MHSINT32 nSize_)
18+
{
19+
StLoadData* pkLoadData = new StLoadData();
20+
pkLoadData->m_pkScene = pkScene_;
21+
pkLoadData->m_nID = nID_;
22+
pkLoadData->m_pData = pData_;
23+
pkLoadData->m_nSize = nSize_;
24+
m_tqLoadData.push(pkLoadData);
25+
}
26+
27+
bool CLoadThreadQue::Pop(StLoadData** ppkLoadData_o)
28+
{
29+
if(m_tqLoadData.empty())
30+
return false;
31+
32+
StLoadData* pkLoadData = m_tqLoadData.front();
33+
if(!pkLoadData->m_bComplete)
34+
{
35+
*ppkLoadData_o = pkLoadData;
36+
return true;
37+
}
38+
39+
delete pkLoadData;
40+
m_tqLoadData.pop();
41+
42+
return false;
43+
}
44+
45+
bool CLoadThreadQue::IsEmpty()
46+
{
47+
return m_tqLoadData.empty();
48+
}
49+
50+
unsigned __stdcall CLoadThreadQue::ThreadLoad(void* pTemp_)
51+
{
52+
StLoadData* pLoadData = NULL;
53+
while(1)
54+
{
55+
if(true == Pop(&pLoadData))
56+
{
57+
if((int)m2::CPID_FIELD_IN_CHARACTER_INFO == pLoadData->m_nID)
58+
{
59+
((m2::SceneGame*)pLoadData->m_pkScene)->FieldInCharacterInfo(pLoadData->m_pData, pLoadData->m_nSize);
60+
}
61+
else if((int)m2::CPID_FIELD_OUT_CHARACTER_INFO == pLoadData->m_nID)
62+
{
63+
((m2::SceneGame*)pLoadData->m_pkScene)->FieldOutCharacterInfo(pLoadData->m_pData, pLoadData->m_nSize);
64+
}
65+
else if((int)m2::CPID_FIELD_WARP_CHARACTER == pLoadData->m_nID)
66+
{
67+
((m2::SceneGame*)pLoadData->m_pkScene)->FieldWarpCharacter(pLoadData->m_pData, pLoadData->m_nSize);
68+
}
69+
70+
pLoadData->m_bComplete = true;
71+
}
72+
}
73+
return 0;
74+
}

m2ThreadLoad.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//
2+
/// @file m2ThreadLoad.h
3+
/// @brief m2 캐릭터 백그라운드 로드(엔진 캐릭터 애니 데이터, 클라이언트 소켓/애니정보 저장부분에서 끊기는 현상 때문에 추가)
4+
/// @date 2015-08-12
5+
/// @author ditto
6+
//----------------------------------------------------------------------------------------------------------------------
7+
#pragma once
8+
9+
//#include <queue>
10+
11+
class Scene;
12+
13+
//
14+
/// @brief 로드할 데이터 정보
15+
/// @date 2015-08-12
16+
/// @author ditto
17+
//----------------------------------------------------------------------------------------------------------------------
18+
struct StLoadData
19+
{
20+
m2::Scene* m_pkScene; //!< 사용할 씬정보
21+
int m_nID; //!< 패킷 아이디
22+
bool m_bComplete; //!< 쓰레드에서 로드 완료 되었는지
23+
MHSBYTE* m_pData; //!< 패킷 데이터
24+
MHSINT32 m_nSize; //!< 패킷 사이즈
25+
26+
StLoadData()
27+
: m_pkScene(NULL)
28+
, m_nID(0)
29+
, m_bComplete(false)
30+
, m_pData(NULL)
31+
, m_nSize(0)
32+
{
33+
}
34+
virtual ~StLoadData()
35+
{
36+
if(m_pData)
37+
delete m_pData;
38+
}
39+
40+
};
41+
42+
//
43+
/// @brief 쓰레드 관리 큐
44+
/// @brief Push는 계속적으로 Pop은 기존것 처리 완료시 한개씩 빼낸다.
45+
/// @date 2015-08-12
46+
/// @author ditto
47+
//----------------------------------------------------------------------------------------------------------------------
48+
class CLoadThreadQue
49+
{
50+
protected:
51+
static std::queue<StLoadData*> m_tqLoadData;
52+
HANDLE m_hThread;
53+
54+
public:
55+
CLoadThreadQue();
56+
virtual ~CLoadThreadQue();
57+
58+
void Push(m2::Scene* pkScene_, int nID_, MHSBYTE* pData_, MHSINT32 nSize_);
59+
static bool Pop(StLoadData** pkLoadData_o);
60+
bool IsEmpty();
61+
62+
static unsigned __stdcall ThreadLoad(void* pTemp_);
63+
64+
private:
65+
CLoadThreadQue(CLoadThreadQue& pLoadThreadQue){};
66+
void operator = (CLoadThreadQue& pLoadThreadQue){};
67+
68+
};
69+
70+
71+
72+
73+
74+
75+

0 commit comments

Comments
 (0)