2011-03-28 52 views
0

我有IKernelTask​​及其派生类(为输入,声音制作单独的内核任务...)另外我有CKernel,它运行不同的内核任务。 CKernel有一个Execute()函数,它运行内核任务列表并运行它们的Update()函数。如何在内核任务之间共享数据? (具有内核/内核任务的游戏引擎)

我在内核任务之间发送数据时遇到困难,所以我决定尝试通过内核发送数据,方法是将内核对象的引用发送给Execute(),然后以相同方式发送给内核任务在Update()中。

CKernel的execute()像这样:

Execute(CKernel &oKernel) 
For each kernel task: 
{ 
    Update(oKernel); 
} 

IKernelTask​​的更新()像这样:

Update(CKernel &oKernel) 
{ 
    // Each kernel task has an overridden Update() function 
} 

在主营:

while (running) 
{ 
    oKernel.Execute(oKernel); 
} 

这将允许内核任务在内核任务之间转发数据,方法是让他们通过Update()函数访问内核。

但是:
1.这是一个很好的解决方案吗?如果不是,那么传统的共享数据的方式是什么?
2.如果这是一个好的解决方案;问题是CKernel需要包含IKernelTask​​,而IKernelTask​​需要包含CKernel。我曾尝试过向前声明,但遇到如下错误:C2027:使用未定义类型'CKernel'

+0

我不认为你像大多数程序员一样使用“内核”这个词。或者数学家的方式。事实上,你的意思是? – 2011-03-28 05:17:38

+0

“为什么让游戏的一部分以内核模式运行?”是我想起来的第一个问题。我同意本,你最好解释一下你的意思是“内核”。 – 2011-03-28 08:03:34

+0

对不起,如果我使用“内核”是错误的。我现在已经学习了C++ 1.5个学期,并且在最近的1/2个学期中一直与游戏引擎一起工作。我们已经学会了将“内核”用于我们之前所称的“游戏管理器”,即基本上运行游戏的对象。这是我们正在做的一个练习的一部分,我们正在设计一个简单的游戏引擎,用于输入,更新定时器,图形,声音和网络等内核任务。 – NyanPrime 2011-03-28 15:40:16

回答

0

您需要#include定义为CKernel的头文件。