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

GTK+ avec C & C++ Discussion :

lecture en continu d'une donnée sans bloquer l'interface ?!


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut lecture en continu d'une donnée sans bloquer l'interface ?!
    bonjours ,

    dans mon projet je doit faire une lecture d'une donnée en continu lorsque j'appuie sur le bouton START . mais cela en arriere plan sans ploquer l'interface ...

    pour l'instant l'ai reussi a faire un callback sur le bouton START , et lancer une boucle infini pour la lecture de la donnée , mais le problème c'est tout est bloqué apres ...

    comment dois je faire pour faire en temps réel une lecture de la donnée en continu , et continuer a travailler sur autre chose en meme temps ?!


    merci a tous

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Cela coule de source pourtant, il te faut utiliser les Threads, tu as une implémentation portable dans la GLIB:
    http://developer.gnome.org/doc/API/2...b-Threads.html
    et un bon cours sur les Threads POSIX ici:
    http://emmanuel-delahaye.developpez.com/pthreads.htm
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut
    je prefere poser la question maintenant , ceci est valable aussi pour un développement sous windows ?
    comme ca je me lance dans la lecture ...

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par coax81
    je prefere poser la question maintenant , ceci est valable aussi pour un développement sous windows ?
    comme ca je me lance dans la lecture ...
    Par rapport au cours, si tu utilise Pthread oui, c'est POSIX.1 donc portable. Par rapport à GLIB, cela ne change pas des masses, il suffit de faire l'adaptation par rapport à ses propres fonctions c'est tout !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut
    merci Franck.H

  6. #6
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut question sur les fonctions thread de gtk+
    bonjours ,


    j'ai crée un thread qui fait une lecture d'un registre en boucle infini , j'ai utilisé la fonction :
    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
     
     void *alert (gpointer *data)
    {
     
        int i;
        int val;
        while(1)
        {
    /*
    .
    .
    .
    */
        }
    }
     
    gboolean th_fonc(gpointer data)
    {
        gdk_threads_enter();
        g_thread_create( alert,data,FALSE,NULL);
        gdk_threads_leave();
    }
    mais il me fais toujours ce warning :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.c: In function `th_fonc':
    main.c:45: warning: passing arg 1 of `g_thread_create_full' from incompatible pointer type

    maintenant je doit utiliser un autre thread dans une fonction callback ,comment je doit procédé ? est ce de la meme facon ou bien il faut utiliser :
    g_thread_create_full?

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par coax81
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void *alert (gpointer *data)
    Mauvaise signature :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gpointer (*GThreadFunc) (gpointer data);

  8. #8
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut
    et pour créer un autre thread faut il faire la meme chose ?

    j'ai procédé de la facon suivante , mais il crée des bug !! mon prog plante :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
     void *alert (gpointer data)
    {
     
        int i;
        int val;
        while(1)
        {
     
        }
     
    }
     
     void *alert2 (gpointer data)
    {
     
        int i;
        int val;
        while(1)
        {
     
        }
     
    }
     
    gboolean th_fonc(gpointer data)
    {
        gdk_threads_enter();
        g_thread_create(alert,data,FALSE,NULL);
        g_thread_create(alert2,data,FALSE,NULL);
        gdk_threads_leave();
    }
    dans le main :
    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
     
    int main(int argc, char **argv)
    {
        g_thread_init (NULL);
        gdk_threads_init ();
        gdk_threads_enter ();
        gtk_init(&argc, &argv);
         /*
          .
          .
          .
         */
         g_idle_add(th_fonc,p_buff);//text_view2
     
        while (gtk_events_pending ()) {  gtk_main_iteration (); }
        gtk_main();
        gdk_threads_leave ();
        return EXIT_SUCCESS;
    }
    dans une callback:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     text_v  =gtk_text_view_new();
        gtk_widget_set_size_request(text_v, 100, 200);
        gtk_text_view_set_editable(GTK_TEXT_VIEW(text_v), FALSE);
        pb = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_v));

    pb est declarée dans un .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GtkTextBuffer *pb;

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    T'es certain d'avoir besoin d'un thread ? Une lecture périodique de ta donnée avec un g_idle_add serait peut être suffisante ?

  10. #10
    Membre confirmé Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Par défaut
    ah oui ?
    et est ce que je peu faire plusieurs iddle_add meme dans des callback ?

Discussions similaires

  1. [WD17] Bloquer la largeur d'une fenêtre sans bloquer sa hauteur
    Par Invité dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2012, 11h50
  2. Réponses: 5
    Dernier message: 26/06/2012, 02h42
  3. Réponses: 3
    Dernier message: 09/02/2009, 16h15
  4. [C# 2] Faire une pause sans bloquer l'application
    Par Tamahome dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/04/2008, 12h53
  5. Réponses: 9
    Dernier message: 10/11/2005, 23h31

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