[SFML, C++] Thread funkcja z argumentem
Ostatnio zmodyfikowano 2015-01-04 20:12
arczi14 Temat założony przez niniejszego użytkownika |
[SFML, C++] Thread funkcja z argumentem » 2015-01-03 16:27:22 Witam, Mam napisany system cząstek w SFML i C++. Chciałbym z niego wyciągnąć większą wydajność i pomyślałem nad klasą sf::Thread. Chciałbym w nowym wątku resetować cząstki którym skończył się czas ale mam problem bo funkcja pobiera argument, a nie wiem co zrobić aby ten argument określić. Mój kod: class ParticleSystem : public sf::Drawable , public sf::Transformable { public: ParticleSystem( unsigned int count, int lt ) : m_thread( & ParticleSystem::resetParticle, this ) { void update( sf::Time elapsed ) { for( std::size_t i = 0; i < m_particles.size(); ++i ) { if( p.lifetime <= sf::Time::Zero ) m_thread.launch(); } } void resetParticle( std::size_t index ) { } sf::Thread m_thread; }
Chodzi o to że musiałbym wprowadzić argument przy uruchomieniu wątku, a tego się chyba nie da prawda ? |
|
DejaVu |
» 2015-01-03 17:13:49 Jak chcesz zwiększyć wydajność animacji to przerzuć obliczenia na GPU za pomocą shaderów. Niemniej jednak w nawiązaniu do tematu: http://www.sfml-dev.org/documentation/2.0/classsf_1_1Thread.phpWywołanie funkcji z argumentami: void threadFunc( int argument ) { ... } sf::Thread thread( & threadFunc, 5 ); thread.launch();
Wywołanie metody na obiekcie: class Task { public: void run() { ... } }; Task task; sf::Thread thread( & Task::run, & task ); thread.launch();
Wywołanie funktora: struct Task { void operator ()() { ... } }; sf::Thread thread( Task() ); thread.launch();
|
|
arczi14 Temat założony przez niniejszego użytkownika |
» 2015-01-03 17:17:35 Dziękuje. Co do shaderów nigdy się tym nie bawiłem. Można jakieś linki prosić ? :) |
|
DejaVu |
» 2015-01-03 17:19:11 Też się nimi nie bawiłem, ale nawet bardzo słaba karta graficzna za 100zł ma lekką ręką 20-50GHz/sec mocy obliczeniowej do dyspozycji, więc jak się da coś wykonać na karcie graficznej to warto to zrobić. |
|
NopeDotAvi |
» 2015-01-04 20:12:00 jeżeli Twój kompilator obsługuje standard c++11 to użyj std::thread |
|
« 1 » |