Portál AbcLinuxu, 9. května 2025 20:33

Dotaz: QT - jednoducha hra - problem subehu

7.4.2012 17:20 Peter
QT - jednoducha hra - problem subehu
Přečteno: 303×
Odpovědět | Admin
Zdravim,

v jednoduchej robenej hre sa mi vyskytol problem so subehom (asi vlaken).

Po skonceni levelu chcem level odstranit a nahrat novy. Problem je, ze sa "niekde bokom" volaju QTimer-y, ktore maju update-ovat stav levelu a po "delete level" to padne. QTimery zastavujem pred volanim "delete level", ale stale je problem s tym, co uz bezi.

To som skusal riesit QMutex-om zamykanym pocas update-u a delete-u, ale to mi nepomoze, ak sa stretne update a delete. Zamykanie QMutex-u v delete sa v takom pripade zablokuje spolu s celym programom (ze ide o prave tento mutex, to som skusal pomocou while(!tenmutex.tryLock()) std::cout << "nezamknute" << std::endl;). Program v takom pripade nepokracuje s update-om az do ukoncenia delete-u, takze sa mutex ani neuvolni; naopak ale pokracuje po ukonceni delete-u, co by som uz nechcel.

Ako to, prosim, riesit?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.4.2012 09:52 Roman Došek | skóre: 17 | blog: flare
Rozbalit Rozbalit vše Re: QT - jednoducha hra - problem subehu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud se ti ten update volá často, bylo by lepší použít semafory než mutexy, s tím, že jeden dáš do metody update a druhý pak do metody, ve které se volá ten delete.
QSemaphore sem(1);

void update()
{
   semaphore.acquire(1);
   ....
   semaphore.release(1);
}
a stejně v mazací metodě...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.