我有2个主题,第一个是玩家刻度,第二个是渲染。 两个线程都没有同步。 我需要在第一个线程中收集信息并在第二个线程中呈现它。 在tick线程中我使用2个循环收集信息。 每次在tick线程中输入代码时,应重置所有渲染目标列表。 我从2个循环中收集这些目标,列表必须是关联的,但由于渲染速度非常快。
void TickThread()
{
g_pLock->Enter(); //EnterCriticalSection
g_List.clear(); //clear list of targets
for (obj1 : g_Objects1) //first loop of objects
{
if (obj1 && true) // here's selection
g_List[obj1->uid] = obj1; //create
}
for (obj2 : g_Objects2) //another loop of objects
{
if (obj2 && true) // here's selection
g_List[obj2->uid] = obj2; //replace if already exists or create
}
g_pLock->Leave(); //code must be fast enough, otherwise it will lock rendering
}
void RenderThread()
{
g_pLock->Enter(); //EnterCriticalSection
for (obj : g_List) //iterate over whole list
{
//render obj.first obj.second
}
g_pLock->Leave();
}
也许我需要一些hashmap,对象的最大计数也是64 我应该使用哪个容器,它应该非常快,还要记住我知道目标的最大数量,所以可以在开始时分配内存吗? 还有什么用于锁定? 我不确定std :: map好主意...... 谢谢
答案 0 :(得分:1)
你可以使用std :: map,因为它们很快。尺寸灵活,您可以在将来使用它。同样如问题中所述,线程应该同步。