Bonjour,
Je souhaiterais limit� dans le temps l'action d'une m�thode d'une classe.
J'ai pens� au thread et au timer mais mon esprit est encore confus.
Voici l'id�e tr�s simple (en soit) de mon projet :
je lis un son � l'aide de la librairie SndObj
J'ai un fichier texte � c�t� dans lequel j'indique qu'� la 5�me seconde on entend un homme parler.
son.txt :
Code : S�lectionner tout - Visualiser dans une fen�tre � part 5 : homme qui parle
Je souhaite lire mon fichier texte et afficher � la 5�me seconde de la lecture du fichier son le texte correspondant. Un peu comme des sous-titre.
L'id�e final est en r�alit� de manipuler une image et de modifier son aspect de fa�on s�quentiel en fonction d'un son. Comme si je cr�e une ligne de temps et que je venais placer des �v�nements se d�clenchant � un temps t1 donn� par le fichier son et qui s'arr�te � un temps t2 donn�e aussi par le fichier son. La ligne s�quentielle �tant donn�e par le fichier texte.
Mes effet suivent une structure du style :
ainsi dans le corps du programme je souhaiterais appeler mon effet � l'aide de start() et qu'il s'arr�te lorsque la valeur stopTime est atteinte.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class Effect{ protected: int m_startTime; int m_stopTime; int m_duree; char m_activity; public: //Destructor virtual ~Effect(); void start(void); void stop(void); virtual void update(void) = 0; };
J'ai voulu utiliser des timer que j'associe � mes objets... mais cette solution ne semble pas id�ale et surtout ne fonctionne pas :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void Effect::start(void) { struct itimerval timerEffect; int duree = m_duree; //en secondes int u_duree = 0; //en milliseconde timerEffect.it_interval.tv_sec = 0; timerEffect.it_interval.tv_usec = 0; timerEffect.it_value.tv_sec = duree; /* set timer for variable duree in seconds */ timerEffect.it_value.tv_usec = u_duree; /* set timer for variable u_duree in milliseconds */ setitimer(ITIMER_REAL, &tout_val,0); signal(SIGALRM,stop); /* set the Alarm signal capture */ m_activity = 1; } void Effect::stop(void) { m_activity = 0; cout<<"Timer finished : fin"<<endl; signal(SIGALRM,stop); }
�a ne passe pas la compilation et je m'en doutais bien car la fonction associ� au timer doit �tre une fonction et non une m�thode....
Je ne vois donc pas comment faire.
Une id�e ??
Merci d'avance !
Merci d'avance pour votre aide.
Partager