IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[C++]Timer pour exécution séparée


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité4
    Invité(e)
    Par défaut [C++]Timer pour exécution séparée
    Bonjour,

    je suis en train de développer un jeu en SDL,
    toutes les 12 secondes, il se resynchronise avec le serveur de jeu, ce qui provoque un freeze de 2 secondes.
    J'ai entendu parler des timer avec SDL.
    Il me semble que ces timers font ce que je souhaite : une exécution périodique et séparée du reste de l'exécution (donc plus de coupures).
    J'ai retenu la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback);
    (http://www.megastep.org/SDL/progsdl5.html)

    Seulement, la doc SDL est assez mal faite je trouve, car je ne comprends pas ce que le paramètre TimerCallback callback représente.
    Si j'ai compris, il s'agit de la fonction qui sera exécutée en différé et périodiquement.

    Donc j'ai ma fonction void ServerRefresh(void), j'ai beau la passer tel quel ou encore &ServerResfresh ou "ServerRefresh", rien ne fonctionne.

    Savez-vous comment faire ?

    Merci

  2. #2
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    Personnellement je n'utilise pas SDL_SetTimer(...) mais plutot SDL_GetTicks() qui recupere le temps courant.

    Si tu le souhaites, j'ai une classe timer entierement faites avec l'utilisation de SDL_GetTicks(), je peux la mettre à ta disposition (elle doit faire l'objet de mon prochain tuto donc...).

    Sinon pour la signification des arguments, tu peux toujours aller voir sur ce man (si ce n'est pas déjà fais):
    http://techpubs.sgi.com/library/tpl/...SDL_SetTimer.Z

    The callback function is passed the current timer interval and returns the next timer inter-val.

  3. #3
    Invité4
    Invité(e)
    Par défaut
    Merci de ta réponse
    En fait, getTicks c'est des timestamp pour gérer le temps.
    Ce que je cherche en fait c'est une exécution différée (faire deux choses en m^eme temps, il me semblait que SetTimer me le permet, mais je rame avec ce callback).
    En fait, cette page d'aide est très bien fait, mais elle ne dit pas comment on donne un callback (c'est bien une fonction à passer en paramètre ?)

  4. #4
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    dans ce cas, pourquoi ne fais-tu pas du multi-threading en lancant ton timer dans un threads different du principal????

    si tu es en C++ comme cela a l'air dans ton titre, vas voir ca deja et , .

    voila, salut

  5. #5
    Invité4
    Invité(e)
    Par défaut
    Citation Envoyé par doudouallemand
    dans ce cas, pourquoi ne fais-tu pas du multi-threading en lancant ton timer dans un threads different du principal????

    si tu es en C++ comme cela a l'air dans ton titre, vas voir ca deja et , .

    voila, salut
    Pour le multithreading, je l'a déjà dit et je me répète : il me semble que les timers SDL reposent là-dessus, et vu que mon exécutable est compilé sous windows et linux, je préfère ne m'appuyer que sur SDL, pour rester compatible.
    Donc ta classe TThread qui y va à coups de ShellExecute, merci


    Citation Envoyé par Laurent Gomila
    C'est-à-dire ?

    Vu la tête de ta fonction callback, j'imagine que c'est une erreur de compilation. Comme la doc l'indique très bien, la fonction passée en paramètre doit prendre un Uint32 en paramètre et renvoyer un Uint32.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uint32 ServerRefresh(Uint32 Param)
    Ok, tu aurais un exemple, car je ne saisis pas la logique il me semble, comment passer d'une fonction en un uint32 ?
    Si je comprends la logique : tu donnes au timer une fonction qui sera exécutée toutes les x [ms] dans un thread séparé ?

    Merci de ta réponse

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    rien ne fonctionne
    C'est-à-dire ?

    Vu la tête de ta fonction callback, j'imagine que c'est une erreur de compilation. Comme la doc l'indique très bien, la fonction passée en paramètre doit prendre un Uint32 en paramètre et renvoyer un Uint32.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uint32 ServerRefresh(Uint32 Param)

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    dans ce cas, pourquoi ne fais-tu pas du multi-threading en lancant ton timer dans un threads different du principal????
    A priori la fonction SDL_SetTimer le fait déjà, donc ce serait inutile et plus compliqué.

  8. #8
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    Citation Envoyé par Laurent Gomila
    A priori la fonction SDL_SetTimer le fait déjà, donc ce serait inutile et plus compliqué.
    oui, je suis d'accord amsi, bon, c'est aussi un solution pour s'en sortir, au cas ou...

    [EDIT]ok, d'accord...[/EDIT]

Discussions similaires

  1. [VBA-EXcel] Timer pour mise jour automatique
    Par Dos dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/09/2006, 20h36
  2. [VB.Net] Timer pour fermer et ouvrir une form
    Par badnane2 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/08/2006, 13h09
  3. [VB.NET] Label - Un timer pour tous ?
    Par b_lob dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/05/2006, 15h56
  4. creer une page avec timer pour 2 URLS
    Par anubisme dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2006, 11h03
  5. Réponses: 4
    Dernier message: 24/11/2005, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo