hej Søren.
tak for svaret, har rettet som du sagde med at flytte Sleep ned i bunden, desuden har jeg prøvet mig med at låse mens tjekket på while løkken sker, desvære uden held.
angående dit 'spørgsmål?', så nej, den døde angriber indtil den 'levende' også er død, ikke før det er han tilfreds
lol
- void dueler(Player &player, Player &enemy)
- {
-
- mux1.lock();
- while ((enemy.ask_dead() == false) && (player.ask_dead() == false))
- {
- mux1.unlock();
-
- mux1.lock();
- cout << player.get_name()<< " hit " << enemy.get_name() << " for " << player.get_str() << " damage!" << endl;
- enemy.dmg(player.get_str());
- mux1.unlock();
- Sleep(player.get_as());
- if ((enemy.ask_dead() == false) && (player.ask_dead() == false))
- mux1.lock();
- }
-
-
-
- }
dette er som den ser ud nu, har dog læst op på raceconditions, men synes at det burde være løst i koden ovenfor, desværre sker der stadig det samme, og er meget usikker på hvad der er fortsat er galt
EDIT: OPDATE, fandt problemet
havde ikke fået objekterne ordenligt ind i min thread
- thread dueler1(dueler,ref(Player1),ref(Player2));
- thread dueler2(dueler, ref(Player2), ref(Player1));
ref på objekterne, da tråde åbenbart Kopirer args ind og ikke bruger & som værende referencer, derfor bruge ref(), når man ønsker at arbejde direkte på et objekt.
Indlæg senest redigeret d. 17.03.2015 21:46 af Bruger #16938