2011-03-28 54 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的頭文件。