Użycie metody std::threads z wywoływaniem wieloargumentowej przeładowanej funkcji.
Ostatnio zmodyfikowano 2022-05-30 20:24
Masterofironfist Temat założony przez niniejszego użytkownika |
Użycie metody std::threads z wywoływaniem wieloargumentowej przeładowanej funkcji. » 2022-05-30 19:57:23 #include <thread> using namespace std;
void logic( MAP & M1, Player & P1, Fruit & F1, GAME & G1, Input & I1, SpecialFruit & SF1 );
void logic( MAP & M1, Player & P1, Fruit & F1, GAME & G1, Input & I1, SpecialFruit & SF1, Object & Obj1 ); int main() { while( !gameover ) { thread logicThread( logic, M1, P1, F1, G1, I1, SF1 ); logic( M1, P1, F1, G1, I1, SF1 ); logicThread.join(); } }
void logic( MAP & M1, Player & P1, Fruit & F1, GAME & G1, Input & I1, SpecialFruit & SF1 ) { }
Dzień dobry. Mam mały problem z metodą std::thread otóż potrzebuje wykonac funkcje logic jako osobny wątek programu żeby program chodził wydajniej ale otrzymuje błąd opisany w komentarzu. A co do referencji to niestety jest ona potrzebna bo te obiekty maja po kilka zmiennych składowych minimum a niektóre nawet zmienne składowe typu string więc jest ona niezbędna w tym wypadku. Próbowałem też zapisać każdy z argumentów w tej postaci ref(arg),ref(arg2),... ale i to nie pomogło. |
|
pekfos |
» 2022-05-30 20:15:16 Najprościej będzie opakować wywołanie w lambdę: thread logicThread([ & M1, & P1, & F1, & G1, & I1, & SF1 ] { logic( M1, P1, F1, G1, I1, SF1 ); } );
|
|
Masterofironfist Temat założony przez niniejszego użytkownika |
» 2022-05-30 20:24:28 Dziękuje za pomoc, ponieważ ta funkcja zajmuje się całą w zasadzie możliwą logiką na danym poziomie, przez co w tej funkcji jest troche obliczeń pozycji a nawet list współrzędnych zapisanych w wektorach i stąd funkcje musze zrobic w osobnym nym wątku. Do tej pory ona była w normalnej formie ale ponieważ ten mini projekt zbliża się ku końcowi muszę go zooptymalizować. |
|
« 1 » |