Files
Leviathan/Library/Internal/include/mmo/ArScheduler.h
T
2026-06-01 12:46:52 +02:00

43 lines
1.2 KiB
C++

#pragma once
/*
Scheduler 는 idle 상태가 아닌 object 들 - active된 object들 - 을 list 로 관리한다.
각 priority level 마다 1개씩의 list 를 두고, priority 에 따라
적절한 시간주기로 list 를 순회하며 process 를 처리한다.
만약 scheduler thread 가 1개이고, list 에 object 들이 충분히 많다면,
list 1회 순회에 걸리는 시간이 해당 priority 가 지켜줘야할 시간을 초과하게
되는 문제가 발생한다. 해서 scheduler thread 갯수는 active된 object의 규모에 따라
적절히 조정되어야 한다.
*/
#include "ArSchedulerObject.h"
#include "../framework/ArcadiaFramework.h"
class ArScheduler
{
public:
ArScheduler();
virtual ~ArScheduler();
bool Init( unsigned thread_count = 1, void (*init_func)( int ) = 0, bool bMonitoringThread = false );
bool DeInit();
void DeleteObject( ArSchedulerObject * obj );
void SetObjectPriority( ArSchedulerObject * obj, ArSchedulerObject::AR_OBJECT_PRIORITY priority );
private:
unsigned getLazyThread();
unsigned m_nThreadCount;
volatile long m_nInstructionCount;
struct ArSchedulerInfo *m_pArSchedulerInfo;
struct ArObjectDestroyerInfo *m_pArObjectDestroyerInfo;
};