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

 C Discussion :

Appel régulier à une fonction sans création de thread


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    septembre 2013
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : septembre 2013
    Messages : 230
    Points : 553
    Points
    553
    Par défaut Appel régulier à une fonction sans création de thread
    Bonjour,

    je souhaite appeler une fonction régulièrement en C. Comme cette fonction rafraichit l'UI je ne peux pas créer de thread sous peine d'avoir une erreur Xlib. Je me suis donc dirigé vers les événements avec ce code :

    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
     
    chargementListeAuto()
    {
    	struct timeval tv;
    	struct event ev;
    	time_t secondsToWait = 20; //60 * 30;
     
    	tv.tv_sec = secondsToWait;
    	tv.tv_usec = 0;
     
    	event_init();
    	evtimer_set(&ev, myFunction, NULL);	
    	evtimer_add(&ev, &tv);
    	event_dispatch();
            //remplacé par :
            event_init();
    	event_set(&ev, 0, EV_PERSIST, myFunction, NULL);
    	event_add(&ev, &tv);	event_dispatch();
            event_dispatch();
    }
    Malheureusement cela lance simplement un timeout (dans les deux cas de figure) et je n'arrive pas à lancer un traitement régulier. Je ne connais pas trop le C et je ne suis pas familier avec les threads. Comme dit plus haut cette fonction fait appel à l'UI et en l'appelant dans un thread différent du thread principal ça me génère une erreur Xlib.

    Quelqu'un aurait une idée comment faire ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 233
    Points : 40 969
    Points
    40 969
    Par défaut
    Si tu utilises une interface graphique avec XLib, c'est justement de ce côté-là que tu dois regarder. Il est possible que XLib offre un équivalent au SetTimer() de Windows, qui cause un événement sur la fenêtre toutes les X millisecondes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    septembre 2013
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : septembre 2013
    Messages : 230
    Points : 553
    Points
    553
    Par défaut
    Si j'ai bien compris ce qui est expliqué dans ton lien, on déclare une boucle while qui informe si on continue ou non à boucler sur les événement graphiques. Et dans l'autre thread on passe ce booléen à faux ce qui nous permet de faire appel à notre événement courant ? Je vais voir si je peux appliquer cette méthode dans mon cas. La lib avec laquelle je travaille date d'il y a 30 ans je crois, et je n'ai pas pu trouver de trace de son existence sur le net

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 233
    Points : 40 969
    Points
    40 969
    Par défaut
    Euh, non, la réponse de mon lien est celle qui envoie directement un XClientMessageEvent d'un thread à l'autre avec XSendEvent()...
    C'est beaucoup plus propre comme ça.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    septembre 2013
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : septembre 2013
    Messages : 230
    Points : 553
    Points
    553
    Par défaut
    D'accord je ne l'avais pas compris comme ça. J'ai réussi à implémenter ça à l'aide d'un thread finalement. Les erreurs n'arrivaient en fait que lorsqu'on on ouvrait une autre fenêtre, du coup je checke le nom de la fenêtre courante avant de lancer la modif. Bien plus facile que prévu finalement.
    Merci de ton aide Médinoc, bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2008, 13h17
  2. Appeler juste une fonction sans include
    Par laurent_ifips dans le forum Langage
    Réponses: 5
    Dernier message: 23/11/2005, 00h08
  3. Réponses: 11
    Dernier message: 16/10/2005, 21h21
  4. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 12h32
  5. Réponses: 4
    Dernier message: 02/06/2004, 17h35

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