2012-09-25 35 views
1

今天使用的pthread我面臨更新在cocos2d-X框架對象的問題。 我嘗試下載異步線程一些文本,然後在CCTextFieldTTF更新文本,之後文本字段中消失。在cocos2d-X

void HelloWorld::callbackFunc(void *Layer, std::vector<promowall::CItem> Items) { 
    cocos2d::CCLayer *layer = static_cast<cocos2d::CCLayer *>(Layer); 
    cocos2d::CCLabelTTF *label = dynamic_cast<cocos2d::CCLabelTTF *>(layer->getChildByTag(10)); 
    label->setString("test");  
} 

如果有人能幫我解釋我該如何使用openGl和pthreads,我將非常感激。

回答

3

如果您callbackFunc從這個異步調用Thread它可能會導致競爭條件可能會導致這樣的行爲(科科斯緩存所呈現的所有字體標籤和CCTextureManager不是線程安全的)。

而且(我想你可以在蘋果的OpenGL編程指南以下信息) - 它是不是安全地調用不同的線程所有OpenGL的方法。如果你創建在不同的線程這串「測試」,茯苓實際上最終創造出一個新的OpenGL紋理(因爲在不同的線程創建的,這可能是不妥當)。我想你可以通過創建具有相同的「測試」文本其他地方不同的標籤(在主線程)檢查這個理論 - 如果在你的代碼中創建一個不再消失 - 這意味着理論是正確的:)

如何解決它?

我相信你必須在主UI線程中創建標籤(或設置文本) - 例如記住隊列中異步回調的結果,並在你的更新方法中定期檢查它。並記住正確的鎖定。