2017-10-05 5 views
0

Ich habe 2 Threads, Ticker des ersten Spielers, zweites Rendering. Beide Threads wurden nicht synchronisiert. Ich muss Informationen im ersten Thread sammeln und es in Sekunde rendern. Im Tick Thread sammle ich Informationen mit 2 Schleifen. Jedes Mal, wenn ein Code im Tick-Thread eingegeben wird, sollte die gesamte Liste der Renderziele zurückgesetzt werden. Ich sammle diese Ziele aus 2 Schleifen, die Liste muss assoziativ sein, aber sehr schnell wegen des Renderings.Welcher Container und Verriegelungsmechanismus wird verwendet?

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(); 
} 

Vielleicht brauche ich einige hashmap, auch die maximale Anzahl der Objekte 64 Welche Container soll ich verwenden, sollte es sehr schnell sein, beachten Sie auch, dass ich die maximale Anzahl der Ziele kennen, können so weisen Speicher an Anfang? Auch was zum Sperren verwenden? Ich bin mir nicht sicher, dass Std :: Karte gute Idee ... Vielen Dank

+0

Warum sind diese beiden Threads und warum sind sie nicht synchronisiert, wenn tatsächlich eine sequentielle Abhängigkeit zwischen ihnen besteht? – user463035818

+0

Es ist nicht meins, ich hakte sie beide – Annett

+0

Um ... was ist deine Frage? –

Antwort

1

Sie können Std :: Karte verwenden, da sie schnell sind. Die Größe ist flexibel und kann in Zukunft erweitert werden. Wie im Problem beschrieben, sollten die Threads synchronisiert werden.

Verwandte Themen