CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

godrik
godrik
Niveau 30
03 octobre 2006 à 18:15:02

bah j´imagine que ton editeur te donne les lignes de compilation qu´il utilise.

Fvirtman
Fvirtman
Niveau 10
03 octobre 2006 à 18:26:44

visiblement, le fichier qui contient l´implémentation de ces 2 fonctions manque au projet.

Ptival
Ptival
Niveau 10
03 octobre 2006 à 19:02:26

En fait j´ai un gros problème avec Dev-C++ là il plante tout le temps c´est très gênant :x

Je sais pas si c´est à cause du SP2 ou quoi, j´vais essayer une version stable précédente...

J´arrive même pas à trouver où il met les options de linker ou quoi que ce soit en fait xD

Sinon normalement JYY les 2 fonctions sont bien implémentées dans ps2icon.c qui est bien dans le projet :\

Ptival
Ptival
Niveau 10
03 octobre 2006 à 19:29:29

Bon j´installe Visual C++ 2005 Express Edition :)

Moi qui auparavant aimait tant mon p´tit Dev-C++...:´(

dynoplasmma
dynoplasmma
Niveau 9
04 octobre 2006 à 14:24:09

Bonjours!
J´ai utilisé les threads pour pouvoir utilisé deux fois de suite l´evennement, mais diferemment.
Et j´ai un warning, ca fonctionne comme je le veux, mais ca me plairais bien qu´il s´en aille :)

http://rafb.net/paste/results/Jj9USf42.html

J´ai indiqué les lignes Warning.

Voici les erreurs qu´ils m´indiquent :
[Warning] assignment makes pointer from integer without a cast
[Warning] assignment makes pointer from integer without a cast

Apparemment, il y a besoin de pointeurs pour quelque chose...

Merci de m´indiquer ce qui coince :)

Fvirtman
Fvirtman
Niveau 10
04 octobre 2006 à 15:24:14

ta fonction "fonctionThreadBonhomme" retourne un "int", et toi tu colles la valeur de retour dans un SDL_Thread *.

De plus, tu risque de te prendre un autre warning : tes fonctions "fonctionThreadBonhomme" et celle d´en dessous n´ont pas de return. Donc en gros, tes pointeurs Thread1 et Thread2 vont récupérer n´importe quoi (d´ou les warning)

Et ça, c´est des warning a crash : ça veut dire que tu vas cracher de façon aléatoire...

Sinon, je serais toi, je reserverai le multithreading que dans les cas extreme ou ça en vaut vraiment la peine... :)

godrik
godrik
Niveau 30
04 octobre 2006 à 15:44:36

je suis de l´avis de Fvirtman, ne pas utiliser le multi-threading a la légère. C´est assez consommateur de ressource de devoir gerer deux thread.
D´un coté, il y a les changement de contexte pour passer d´un thread a l´autre, mais on est en plus obligé de synchroniser les thread pour qu´il n´y ait pas d´access concurent a une variable.

Je n´utilise quasiment jamais de multithreading. parfois je gère l´affichage de mon jeu de façon découpler du moteur de jeu. Je fais tourner l´affichage a basse priorité et hop voila! Comme c´est toujours le meme qui ecris et le meme qui lit. Bah c´est facil de signaler a l´affichage qu´il devra relire les données avant d´afficher et l´un prend la priorité sur l´autre.

De l´autre coté, je ne fais principalement que du 2D phasé, donc pas tres intensif sur le proc donc bon...

L´autre interet du multithreading c´est d´exploiter les machine moderne multi core (ou virtuellement multi core, je penses au HT) pour faire des calculs plus rapidement. Mais c´est une utilisation compliqué du multithreading (bien que passionante)

dnob700
dnob700
Niveau 10
04 octobre 2006 à 17:14:49

en forkant le sujet, j´ajouterais que c´est passionnant, mais pas forcément compliqué.Certains truc commel´API OpenMP permettent de réaliser du multithreading très très simplement.
juste en rajouttant des pragma.

par exemple, la boucle :

for (i=0;i<1000;i++)
str[i]=0;

qui est assez débile je vous l´accorde et qui sera vectorisée par n´importe quel compilateur et parallélisée par n´importe quel bon compilo peut quand même être rendu explicitement parallèle avec un pragma OpenMP :

  1. pragma omp parallel for default shared (str)

for (i=0;i<1000;i++)
str[i]=0;

et voila, vous avez une boucle parallel, qui par défaut s´exécutera en autant de morceaux différent qu´il y a de processeurs (ou de coeurs) sur la machine, et avec très peu de surcharge car (par défaut encore) l´allocation des blocs parallèles est faite de manièreplus ou moins statique.

C´est un truc sympa car c´est une norme ouverte, donc n´importe qui peut l´implémenter (même mieux que le C++ car je crois que les spec sont gratuites).
c´est géré par tout les bon compilo, même gcc a un addon (encore en béta) pour le faire.

dynoplasmma
dynoplasmma
Niveau 9
04 octobre 2006 à 17:50:20

Merci bien pour ces correction et renseignements.
Mais j´ai pas trouvé d´autres solutions que le multithreading pour gerer ce probleme.
Dans ce jeu tres precis, il faut tester si la touche est enfoncé, ou non enfoncé avec deux touches differentes. A la limite, je met un test en thread, et l´autre comme ca.
Mais je doute que ca fonctionne.

dynoplasmma
dynoplasmma
Niveau 9
04 octobre 2006 à 17:59:32

Ca fonctionne parfaitement avec un thread :)

godrik
godrik
Niveau 30
04 octobre 2006 à 18:00:35

dnob, as tu un pointeur sur le document listant ce qui est un pragma valide ou non ?

Fvirtman
Fvirtman
Niveau 10
04 octobre 2006 à 18:01:00

Pour gérer le clavier, tu n´as pas besoin de cela.
Je te propose une méthode simple :

Tu tiens en mémoire un tableau global de booleans qui contient le statut de toutes les touches.
chaque touche est une case du tableau, regarder si cette case vaut 1 ou 0 permet de voir si elle est enfoncée ou non.

Pour tester si 2 touches sont enfoncées :
if (key(SDLK_ESC) && key(SDLK_h))
{
// ne passe ici que si les 2 touches esc et h so
nt en bas.
}

Apres, tu me diras, comment mettre a jour le tableau ?
Les API (SDL par exemple) propose automatiquement un systeme de file :
chaque fois qu´une touche est enfoncée, un evenement est généré disant "la touche X a été pressée"
chaque fois qu´une touche est relachée, un evenement est généré disant "la touche X a été relachée"

il suffit de regarder la file d´events, et de mettre a jour le tableau.

L´exemple 2.1.4 sur mon site parle de cela. Tu y verras une fonction "UpdateEvents" appelée a chaque début de boucle principale, dont le but est de mettre a jour l´état du clavier.
Une fois a jour, de simples if permettent de voir si une touche est en bas ou non.

dynoplasmma
dynoplasmma
Niveau 9
04 octobre 2006 à 18:33:40

Parfait !
Les moments ou j´utilisait pas ce tableau etait la ou j´avais besoin de faire des tests enfoncé/relaché. Grace a toi, j´ai la technique, merci ;)

dynoplasmma
dynoplasmma
Niveau 9
04 octobre 2006 à 18:39:25

Euh je viens de remarquer quelque chose :

tu as fait :
int key[400];

j´ai fait :
Uint8 *key = SDL_GetKeyState(NULL);

Quelle est la meileure methode des deux ?
(les deux fonctionnent)

dnob700
dnob700
Niveau 10
04 octobre 2006 à 22:55:46

godrik : n´importe quel site sur OpenMP doit faire l´affaire.

j´ai trouvé ça,
http://www.idris.fr/data/cours/parallel/openmp/OpenMP_cours.pdf mais comme jen´ais pas acrobat pour l´instant (je suis en train de réinstaller mon PC) je ne peut pas te dire ce que ça vaut.

en vrac :
http://www.idris.fr/data/cours/parallel/openmp/
http://www.openmp.org/drupal/

sinon, globalement je peut te les donner :

  1. pragma omp parallel //parallélise une région du c

ode.

  1. pragma omp for //partage une boucle for entre dif

férent thread dans une région parallélisé

  1. pragma omp do //pareil avec un do
  2. pragma omp parallel for //les deux d´un coup (par

allélise le for dans une région qui ne l´est pas).

  1. pragma omp parallel do //idem avec le do.

c´est les principaux, mais il y en a quelques autr
es (pour synchroniser les différents thread), plus leurs options, plus quelques fonctions (genre omp_set_num_thread) pour modifier le comportement de l´api.

Fvirtman
Fvirtman
Niveau 10
05 octobre 2006 à 09:36:35

Dnob > Intéressant de parralléliser a coup de pragma :)
Surtout que c´est souvent le cas : des tableaux ou il faut faire une opération pour chaque élément, indépendemment des autres.

dynoplasmma > je n´ai pas utilisé SDL_GetKeyState. En fait, je fais mon tableau car je controle tout comme ça :) Je ne sais pas exactement ce que fait SDL_GetKeyState : si elle alloc a chaque fois qu´on l´appelle, c´est moins rapide. (mais peut etre qu´elle est tres rapide !) Mais comme j´ai déja mis l´autre méthode dans mon noyau "Futils" (maintenant, je gere meme les joysticks de la meme façon), je la laisse comme ça :)

Grosse_tete1
Grosse_tete1
Niveau 5
15 octobre 2006 à 18:03:45

Voila, je n´ai pas bien compris le systeme des des fonctions avec arguments. Par exemple, quelle est la différence entre :

int fonction1 (void)
{ int a;
int b;
}

et entre

int fonction 1 (int a, int b)
{
}

Grosse_tete1
Grosse_tete1
Niveau 5
15 octobre 2006 à 18:04:42

Pardon c´est fonction1 et pas fonction 1.

guyver2
guyver2
Niveau 10
15 octobre 2006 à 18:33:23

la 1ere est une fonction sans arguments, qui déclare deux variables locale qui serviront dans la fonction.

la deuxiemme est une fonction qui prend deux argument de type int.

a quoi ça sert donc de passer des arguments a une fonction??

par exemple tu veux une fonction qui calcule la somme de deux nombre

int somme (int a, int b)
{
int res;
res = a+b;
return res;
}

bon c´est tres idiot comme fonction mais on voit bien que cette fonction prend deux variables en arguments (a et b) et se sert d´une variable locale (res).

dans la suite de ton programme tu peux appeler

int s1 = somme(5,6);
// ici s1 vaut 11

et voila

Grosse_tete1
Grosse_tete1
Niveau 5
15 octobre 2006 à 19:37:29

D´accord, merci, je vais tout de suite essayer de le mettre en application.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment