je pert le focus ... [SDL] - C++ - Programmation
Marsh Posté le 21-09-2004 à 16:14:29
prendre un bescherelle... ça réduira une partie des pbs mais c'est pas très gentil comme réponse ! 
ça sent bien la boucle infini comme bug ça...
Marsh Posté le 21-09-2004 à 17:30:24
la raison viens du fait que j'utilise un thread pour le rendu, et un thread pour les evenements 
 
quand je regroupe ces 2 threads en 1 la ca marche nikel 
 
j'ai voulue faire un truc du style pour garder mes 2 threads 
 
 
du cote du thread gfx 
 
while(!_quit) 
{ 
  SDL_MutexP(_mutex_gfx); 
  .... 
  SDL_MutexV(_mutex_event); 
} 
 
 
et du cote du thread events 
 
while(!_quit) 
{ 
  SDL_MutexP(_mutex_event); 
  .... 
  SDL_MutexV(_mutex_gfx); 
} 
 
 
en fesant bien attention a avoir un decalage de temp au debut affin de bien initialiser 
  
mais rien a faire 
 c'est comme si chacun avais rien a battre du mutex 
 
 
mutex gfx           mutex event 
 
lock de gfx            
tratements gfx 
unlock event            lock de event 
lock de gfx bloquant    traitements event 
lock de gfx bloquant    on unlock gfx 
 
lock de gfx             lock de event bloquant 
tratements gfx          lock de event bloquant 
unlock event            lock de event 
lock de gfx bloquant    traitements event 
lock de gfx bloquant    on unlock gfx 
 
   
 
sauf que dans la pratique, ils me renvoillent toujours 0 comme quoi ils arrivent a locker le thread 
 alors qu'il est deja locke !!!  
le unlock se passe bien lui  
 
Marsh Posté le 22-09-2004 à 22:21:50
| Eugenics a écrit :    | 
 
 
Quand tu utilises un mutex, il faut le verrouiller avant le traitement puis le déverrouiller à la fin du traitement. Ici, à la fin de ton bloc d'instructions, tu unlock un mutex qui n'a pas été préalablement locké. Utilises un code de ce style dans chaque thread :  
 
Code :
  | 
Marsh Posté le 23-09-2004 à 08:06:05
Un truc qui marche est de créer une classe Mutex stack-based. 
Ainsi, là où l'on veut verrouiller, on n'a qu'a déclarer le mutex qui verrouille dans le constructeur, et déverrouille dans le destructeur. 
Ce qui permet de faire à l'utilisation : 
Code :
  | 
Marsh Posté le 23-09-2004 à 20:35:54
Au passage, ce pattern bien connu est recommandé pour toutes les acquisitions de ressources partageables, par exemple l'ouverture d'un fichier (faire une classe fichier est d'ailleurs tjrs une bonne idée), d'un port, etc.
Marsh Posté le 15-10-2004 à 00:04:23
je reveisn sur cette histoire (au final j'ai degagé le threading de mon programe) 
 
mais je comprend toujours pas pkoi ca fonctionnais pas mon systeme 
  
  
la fonction SDL_MutexP() en sdl est bien sencée locker un mutex.  
Et etre bloquant tant que celui ci est locké ??? 
 
et un mutex ettant visible a partir de tout les thread ....  
 
il est possible pour  
le thread A de bloquer le mutex 1  (dans le Thread B on attend le delock du mutex1 pour reprendre l'execution) 
le thread A fais son traitement   (dans le Thread B on attend toujours le delock pour reprendre l'execution) 
Le thread A finis son traitemnt, delocke le mutex 1 ce qui entraine la reprise de l'execution du Thread B 
 
non ?   
 
Marsh Posté le 21-09-2004 à 15:58:39
Salut ,

Je cree une aplication en mode fenetré avec SDL sous windows XP avec VC++.
j'initialise ma sdl, je lance le rendu, ca m'affiche ce que je veux pendant 10 secondes environ apres pouf! ca deviens tout blanc avec dans la barre de titre de la fenetre monapi(ne repond pas)
de plus il m'est impossible de bouger la fenetre rien (avant que ca reponde plus) ...
je sais plus quoi faire
Message édité par Eugenics le 21-09-2004 à 16:01:27