Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML, C++] Thread funkcja z argumentem

Ostatnio zmodyfikowano 2015-01-04 20:12
Autor Wiadomość
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:

C/C++
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();
                // standardowo było
                // resetParticle(i)
               
            }
        }
       
        //...
       
        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 ?
P-123942
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.php

Wywołanie funkcji z argumentami:
C/C++
// example 1: non member function with one argument
void threadFunc( int argument )
{
    ...
}
sf::Thread thread( & threadFunc, 5 );
thread.launch(); // start the thread (internally calls threadFunc(5))

Wywołanie metody na obiekcie:
C/C++
// example 2: member function
class Task
{
public:
    void run()
    {
        ...
    }
};
Task task;
sf::Thread thread( & Task::run, & task );
thread.launch(); // start the thread (internally calls task.run())

Wywołanie funktora:
C/C++
// example 3: functor
struct Task
{
    void operator ()()
    {
        ...
    }
};
sf::Thread thread( Task() );
thread.launch(); // start the thread (internally calls operator() on the Task instance)
P-123953
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ć ? :)
P-123955
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ć.
P-123956
NopeDotAvi
» 2015-01-04 20:12:00
jeżeli Twój kompilator obsługuje standard c++11 to użyj
std::thread
P-124133
« 1 »
  Strona 1 z 1